﻿Imports WSEntidades
Imports Utilerias
''' <summary>
''' Clase que valida los complementos implementados en CFDI Premium
''' </summary>
''' <remarks></remarks>
Public Class ValidaComplementos

    ''' <summary>
    ''' Metodo que valida la información del complemento IEDU
    ''' </summary>
    ''' <param name="Elementos">Array de String que contiene los elementos de la sección</param>
    ''' <param name="concepto">Objeto de tipo ComprobanteConcepto que contiene la información de la partida a la que se añadira el complemento</param>
    ''' <param name="Resp">Lista de RespuestaPremium a la que se añadiran los errores</param>
    ''' <remarks></remarks>
    Public Shared Sub ComplementoIEDU(ByVal Elementos As String(), ByRef concepto As ComprobanteConcepto, _
                                           ByRef Resp As List(Of RespuestaPremium))
        Try
            Dim ieduPadre As New instEducativas()
            If (Elementos Is Nothing) Then
                ValidaCFDi.AgregaRespuesta("02", 0, "La línea de la Seccion 02 no pudo ser procesada, no se logro realizar la separación de elementos.", Resp)
            End If
            'Procesa IEDU
            If (Elementos(20) = "IEDU") Then
                'Version 1.0
                ieduPadre.version = Elementos(21).Trim()
                If (ieduPadre.version <> "1.0") Then
                    ValidaCFDi.AgregaRespuesta("02", 22, "El contenido del documento TXT no es correcto.  El atributo VERSION para el complemento IEDU es incorrecto", Resp)
                End If
                'Alumno
                ieduPadre.nombreAlumno = Elementos(22)
                If (ieduPadre.nombreAlumno = "") Then
                    ValidaCFDi.AgregaRespuesta("02", 23, "El contenido del documento TXT no es correcto.  El atributo nombreAlumno para el complemento IEDU es incorrecto", Resp)
                    Throw New Exception()
                End If
                'CURP
                If (csValidaciones.valida_CURP(Elementos(23))) Then
                    ieduPadre.CURP = Elementos(23)
                Else
                    ValidaCFDi.AgregaRespuesta("02", 24, "El contenido del documento TXT no es correcto.  El atributo CURP para el complemento IEDU es incorrecto", Resp)
                End If
                'Nivel educativo
                Select Case Elementos(24).ToString().Trim()
                    Case "Preescolar"
                        ieduPadre.nivelEducativo = instEducativasNivelEducativo.Preescolar
                    Case "Primaria"
                        ieduPadre.nivelEducativo = instEducativasNivelEducativo.Primaria
                    Case "Secundaria"
                        ieduPadre.nivelEducativo = instEducativasNivelEducativo.Secundaria
                    Case "Profesional"
                        ieduPadre.nivelEducativo = instEducativasNivelEducativo.Profesionaltécnico
                    Case "Bachillerato"
                        ieduPadre.nivelEducativo = instEducativasNivelEducativo.Bachilleratoosuequivalente
                    Case Else
                        ValidaCFDi.AgregaRespuesta("02", 25, "El contenido del documento TXT no es correcto.  El atributo nivelEducativo para el complemento IEDU es incorrecto", Resp)
                End Select

                ieduPadre.autRVOE = Elementos(25)
                If (ieduPadre.autRVOE = "") Then
                    ValidaCFDi.AgregaRespuesta("02", 26, "El contenido del documento TXT no es correcto.  El atributo autRVOE para el complemento IEDU es incorrecto", Resp)
                End If
                ''Valor opcional
                If (Elementos(26).ToString().Trim() <> "") Then
                    ieduPadre.rfcPago = Elementos(26)
                End If
            Else
                ValidaCFDi.AgregaRespuesta("02", 21, "El contenido del documento TXT no es correcto.  No se encontró la seccion IEDU", Resp)
            End If

            If (Resp.Count = 0) Then
                Dim complCon As New ComprobanteConceptoComplementoConcepto()
                Dim mensaje As String = ""
                Dim d As New csUtilsCFD
                ReDim complCon.Any(0)
                complCon.Any(0) = d.formaXmlIEDU(ieduPadre, mensaje)
                ReDim concepto.Items(0)
                concepto.Items(0) = complCon
                If (mensaje <> "") Then
                    ValidaCFDi.AgregaRespuesta("02", 21, "Error al formar IEDU: " + mensaje, Resp)
                End If
            End If
        Catch ex As Exception
            ValidaCFDi.AgregaRespuesta("02", 0, ex.Message, Resp)
        End Try
    End Sub

    ''' <summary>
    ''' Metodo que valida la información del complemento POR CUENTA DE TERCEROS
    ''' </summary>
    ''' <param name="Elementos">Array de String que contiene los elementos de la sección</param>
    ''' <param name="Resp">Lista de RespuestaPremium a la que se añadiran lo errores</param>
    ''' <param name="Terceros">Objeto que contendra la información del complementos terceros</param>
    ''' <param name="comprobante">Objeto de tipo Comprobante que contiene la información del CFDI</param>
    ''' <param name="LlevaTerParte">Variable de tipo boolean que indicara si ya existe el nodo Parte</param>
    ''' <param name="LlevaTerAduana">Variable de tipo boolean que indicara si ya existe el nodo Aduana</param>
    ''' <param name="LlevaTerPredial">Variable de tipo boolean que indicara si ya existe el nodo Predial</param>
    ''' <remarks></remarks>
    Public Shared Sub ComplementoTERCEROS(ByVal Elementos As String(), _
                                               ByRef Resp As List(Of RespuestaPremium), _
                                               ByRef Terceros As Terceros.PorCuentadeTerceros, ByRef comprobante As Comprobante, _
                                               ByRef LlevaTerParte As Boolean, ByRef LlevaTerAduana As Boolean, _
                                               ByRef LlevaTerPredial As Boolean)
        Try
            If (Terceros Is Nothing) Then
                Terceros = New Terceros.PorCuentadeTerceros
            End If

            If (Elementos(1) = "TERCEROS" And Elementos(2).Trim <> "CUENTAPREDIAL" And Elementos.Length = 4) Then
                Terceros.version = "1.1"
                Terceros.rfc = Elementos(2)
                Terceros.rfc = Terceros.rfc.ToUpper()
                csUtilsCFD.escribeAtributoConReglasA20CFDI("RFC PorCuentaDeTerceros", Terceros.rfc, True, Resp, "02-2", 3)
                If (Terceros.rfc = "") Then
                    ValidaCFDi.AgregaRespuesta("02-2", 1, "El contenido del documento TXT no es correcto.  El atributo 'RFC' del Complemento PorCuentaDeTerceros tiene un valor no válido.", Resp)
                ElseIf Not (csValidaciones.valida_RFC(Terceros.rfc, "T")) Then
                    ValidaCFDi.AgregaRespuesta("02-2", 1, "El contenido del documento TXT no es correcto.  El atributo 'RFC' del Complemento PorCuentaDeTerceros no cumple con la estructura de un RFC.", Resp)
                End If
                If (Elementos(3).ToString.Trim <> "") Then
                    Terceros.nombre = Elementos(3)
                    csUtilsCFD.escribeAtributoConReglasA20CFDI("Nombre PorCuentaDeTerceros", Terceros.nombre, True, Resp, "02-2", 4)
                End If

            ElseIf (Elementos(1) = "TERCEROS" And Elementos(2) = "INFOFISCAL" And Elementos.Length = 13) Then
                Terceros.InformacionFiscalTercero = New Terceros.PorCuentadeTercerosInformacionFiscalTercero()
                Terceros.InformacionFiscalTercero.calle = Elementos(3)
                If (Terceros.InformacionFiscalTercero.calle = "") Then
                    ValidaCFDi.AgregaRespuesta("02-2", 2, "El contenido del documento TXT no es correcto.  El atributo 'calle' del Complemento PorCuentaDeTerceros tiene un valor no válido.", Resp)
                End If
                If (Elementos(4).ToString.Trim <> "") Then
                    Terceros.InformacionFiscalTercero.noExterior = Elementos(4).ToString.Trim
                End If
                If (Elementos(5).ToString.Trim <> "") Then
                    Terceros.InformacionFiscalTercero.noInterior = Elementos(5).ToString.Trim
                End If
                If (Elementos(6).ToString.Trim <> "") Then
                    Terceros.InformacionFiscalTercero.colonia = Elementos(6).ToString.Trim
                End If
                If (Elementos(7).ToString.Trim <> "") Then
                    Terceros.InformacionFiscalTercero.localidad = Elementos(7).ToString.Trim
                End If
                If (Elementos(8).ToString.Trim <> "") Then
                    Terceros.InformacionFiscalTercero.referencia = Elementos(8).ToString.Trim
                End If
                Terceros.InformacionFiscalTercero.municipio = Elementos(9)
                If (Terceros.InformacionFiscalTercero.municipio = "") Then
                    ValidaCFDi.AgregaRespuesta("02-2", 8, "El contenido del documento TXT no es correcto.  El atributo 'municipio' del Complemento PorCuentaDeTerceros tiene un valor no válido.", Resp)
                End If
                Terceros.InformacionFiscalTercero.estado = Elementos(10)
                If (Terceros.InformacionFiscalTercero.estado = "") Then
                    ValidaCFDi.AgregaRespuesta("02-2", 9, "El contenido del documento TXT no es correcto.  El atributo 'estado' del Complemento PorCuentaDeTerceros tiene un valor no válido.", Resp)
                End If
                Terceros.InformacionFiscalTercero.pais = Elementos(11)
                If (Terceros.InformacionFiscalTercero.pais = "") Then
                    ValidaCFDi.AgregaRespuesta("02-2", 10, "El contenido del documento TXT no es correcto.  El atributo 'pais' del Complemento PorCuentaDeTerceros tiene un valor no válido.", Resp)
                End If
                Terceros.InformacionFiscalTercero.codigoPostal = Elementos(12)
                If (Terceros.InformacionFiscalTercero.codigoPostal = "") Then
                    ValidaCFDi.AgregaRespuesta("02-2", 11, "El contenido del documento TXT no es correcto.  El atributo 'Codigo Postal' del Complemento PorCuentaDeTerceros tiene un valor no válido.", Resp)
                ElseIf (Terceros.InformacionFiscalTercero.codigoPostal.Length <> 5) Then
                    ValidaCFDi.AgregaRespuesta("02-2", 11, "El contenido del documento TXT no es correcto.  El atributo 'Codigo Postal' del Complemento PorCuentaDeTerceros tiene un valor no válido.", Resp)
                End If

            ElseIf (Elementos(1) = "TERCEROS" And Elementos(2) = "INFOADUANERA" And Elementos.Length = 6 And LlevaTerParte = False And LlevaTerPredial = False) Then
                Dim infoaduana As New Terceros.PorCuentadeTercerosInformacionAduanera()
                infoaduana.numero = Elementos(3)
                csUtilsCFD.escribeAtributoConReglasA20CFDI("Numero Aduana", infoaduana.numero, True, Resp, "02-2", 4)
                infoaduana.fecha = DateTime.ParseExact(Elementos(4), "yyyy-MM-dd", Nothing)
                If (Elementos(5).ToString.Trim <> "") Then
                    infoaduana.aduana = Elementos(5).ToString.Trim
                End If
                If (Terceros.Items Is Nothing) Then
                    ReDim Terceros.Items(0)
                Else
                    ReDim Preserve Terceros.Items(Terceros.Items.Length)
                End If
                Terceros.Items(Terceros.Items.Length - 1) = infoaduana
                LlevaTerAduana = True

            ElseIf (Elementos(1) = "TERCEROS" And Elementos(2) = "PARTE" And Elementos.Length = 9 And LlevaTerAduana = False And LlevaTerPredial = False) Then
                Dim parteTerceros As New Terceros.PorCuentadeTercerosParte()
                Try
                    parteTerceros.cantidad = Convert.ToDecimal(Elementos(3).Trim)
                Catch e As Exception
                    ValidaCFDi.AgregaRespuesta("02-2", 2, "El contenido del documento TXT no es correcto.  El atributo 'Cantidad' del Complemento PorCuentaDeTerceros tiene un valor no válido de acuerdo a su tipo de datos.", Resp)
                End Try
                If (Elementos(4).ToString.Trim <> "") Then
                    parteTerceros.unidad = Elementos(4).ToString.Trim
                End If
                If (Elementos(5).ToString.Trim <> "") Then
                    parteTerceros.noIdentificacion = Elementos(5).ToString.Trim
                End If
                parteTerceros.descripcion = Elementos(6).ToString.Trim
                If (parteTerceros.descripcion = "") Then
                    ValidaCFDi.AgregaRespuesta("02-2", 5, "El contenido del documento TXT no es correcto. El atributo 'descripcion' del Complemento PorCuentaDeTerceros tiene un valor no válido de acuerdo a su tipo de datos.", Resp)
                End If
                If (Elementos(7).ToString.Trim <> "") Then
                    Try
                        parteTerceros.valorUnitario = CDec(Elementos(7).Trim)
                        parteTerceros.valorUnitarioSpecified = True
                    Catch e As Exception
                        ValidaCFDi.AgregaRespuesta("02-2", 6, "El contenido del documento TXT no es correcto.  El atributo 'ValorUnitario' del Complemento PorCuentaDeTerceros tiene un valor no válido de acuerdo a su tipo de datos.", Resp)
                    End Try
                End If
                If (Elementos(8).ToString.Trim <> "") Then
                    Try
                        parteTerceros.importe = CDec(Elementos(8).Trim)
                        parteTerceros.importeSpecified = True
                    Catch e As Exception
                        ValidaCFDi.AgregaRespuesta("02-2", 7, "El contenido del documento TXT no es correcto.  El atributo 'importe' del Complemento PorCuentaDeTerceros tiene un valor no válido de acuerdo a su tipo de datos.", Resp)
                    End Try
                End If
                If (Terceros.Items Is Nothing) Then
                    ReDim Terceros.Items(0)
                Else
                    ReDim Preserve Terceros.Items(Terceros.Items.Length)
                End If
                Terceros.Items(Terceros.Items.Length - 1) = New Terceros.PorCuentadeTercerosParte()
                Terceros.Items(Terceros.Items.Length - 1) = parteTerceros
                LlevaTerParte = True

            ElseIf (Elementos(1) = "TERCEROS" And Elementos(2) = "ADUANAPARTE" And Elementos.Length = 6 And LlevaTerParte = True) Then
                Dim infoaduana As New Terceros.PorCuentadeTercerosInformacionAduanera()
                infoaduana.numero = Elementos(3)
                csUtilsCFD.escribeAtributoConReglasA20CFDI("Numero Aduana", infoaduana.numero, True, Resp, "02-2", 4)
                infoaduana.fecha = DateTime.ParseExact(Elementos(4), "yyyy-MM-dd", Nothing)
                If (Elementos(5).ToString.Trim <> "") Then
                    infoaduana.aduana = Elementos(5).ToString.Trim
                End If
                Dim parteTer As New Terceros.PorCuentadeTercerosParte
                parteTer = Terceros.Items(Terceros.Items.Length - 1)
                If (parteTer.InformacionAduanera Is Nothing) Then
                    ReDim parteTer.InformacionAduanera(0)
                Else
                    ReDim Preserve parteTer.InformacionAduanera(parteTer.InformacionAduanera.Length)
                End If
                parteTer.InformacionAduanera(parteTer.InformacionAduanera.Length - 1) = New Terceros.PorCuentadeTercerosInformacionAduanera()
                parteTer.InformacionAduanera(parteTer.InformacionAduanera.Length - 1) = infoaduana


            ElseIf (Elementos(1) = "TERCEROS" And Elementos(2) = "CUENTAPREDIAL" And Elementos.Length = 4 And LlevaTerAduana = False And LlevaTerParte = False) Then
                Dim CtaPredial As New Terceros.PorCuentadeTercerosCuentaPredial()
                CtaPredial.numero = Elementos(3)
                If (CtaPredial.numero.ToString.Trim = "") Then
                    ValidaCFDi.AgregaRespuesta("02-2", 2, "El contenido del documento TXT no es correcto.  El atributo 'numero' de Cuenta Predial del Complemento PorCuentaDeTerceros tiene un valor no válido de acuerdo a su tipo de datos.", Resp)
                End If
                If (Terceros.Items Is Nothing) Then
                    ReDim Terceros.Items(0)
                Else
                    ReDim Preserve Terceros.Items(Terceros.Items.Length)
                End If
                Terceros.Items(Terceros.Items.Length - 1) = CtaPredial

            ElseIf (Elementos(1) = "TERCEROS" And Elementos(2) = "IMPUESTO") Then
                If (Elementos(3) = "RETENCION" And Elementos.Length = 6) Then
                    If (Terceros.Impuestos Is Nothing) Then
                        Terceros.Impuestos = New Terceros.PorCuentadeTercerosImpuestos()
                    End If
                    If (Terceros.Impuestos.Retenciones() Is Nothing) Then
                        ReDim Terceros.Impuestos.Retenciones(0)
                    Else
                        ReDim Preserve Terceros.Impuestos.Retenciones(Terceros.Impuestos.Retenciones.Length)
                    End If
                    Terceros.Impuestos.Retenciones(Terceros.Impuestos.Retenciones.Length - 1) = New Terceros.PorCuentadeTercerosImpuestosRetencion()
                    If (Elementos(4).Trim <> "") Then
                        Select Case Elementos(4).Trim.ToUpper()
                            Case "IVA"
                                Terceros.Impuestos.Retenciones(Terceros.Impuestos.Retenciones.Length - 1).impuesto = WSPremium.Terceros.PorCuentadeTercerosImpuestosRetencionImpuesto.IVA
                            Case "ISR"
                                Terceros.Impuestos.Retenciones(Terceros.Impuestos.Retenciones.Length - 1).impuesto = WSPremium.Terceros.PorCuentadeTercerosImpuestosRetencionImpuesto.ISR
                        End Select
                    Else
                        ValidaCFDi.AgregaRespuesta("02-2", 3, "El contenido del documento TXT no es correcto.  El atributo 'impuesto' de Retencion del Complemento PorCuentaDeTerceros tiene un valor no válido de acuerdo a su tipo de datos.", Resp)
                    End If
                    If (Elementos(5).Trim <> "") Then
                        Try
                            Terceros.Impuestos.Retenciones(Terceros.Impuestos.Retenciones.Length - 1).importe = CDec(Elementos(5))
                        Catch ex As Exception
                            ValidaCFDi.AgregaRespuesta("02-2", 4, "El contenido del documento TXT no es correcto.  El atributo 'importe' de Retencion del Complemento PorCuentaDeTerceros tiene un valor no válido de acuerdo a su tipo de datos.", Resp)
                        End Try
                    End If
                ElseIf (Elementos(3) = "TRASLADO" And Elementos.Length = 7) Then
                    If (Terceros.Impuestos Is Nothing) Then
                        Terceros.Impuestos = New Terceros.PorCuentadeTercerosImpuestos()
                    End If
                    If (Terceros.Impuestos.Traslados() Is Nothing) Then
                        ReDim Terceros.Impuestos.Traslados(0)
                    Else
                        ReDim Preserve Terceros.Impuestos.Traslados(Terceros.Impuestos.Traslados.Length)
                    End If
                    Terceros.Impuestos.Traslados(Terceros.Impuestos.Traslados.Length - 1) = New Terceros.PorCuentadeTercerosImpuestosTraslado()
                    If (Elementos(4).Trim <> "") Then
                        Select Case Elementos(4).Trim.ToUpper()
                            Case "IVA"
                                Terceros.Impuestos.Traslados(Terceros.Impuestos.Traslados.Length - 1).impuesto = WSPremium.Terceros.PorCuentadeTercerosImpuestosTrasladoImpuesto.IVA
                            Case "IEPS"
                                Terceros.Impuestos.Traslados(Terceros.Impuestos.Traslados.Length - 1).impuesto = WSPremium.Terceros.PorCuentadeTercerosImpuestosTrasladoImpuesto.IEPS
                        End Select
                    Else
                        ValidaCFDi.AgregaRespuesta("02-2", 3, "El contenido del documento TXT no es correcto.  El atributo 'impuesto' de Traslado del Complemento PorCuentaDeTerceros tiene un valor no válido de acuerdo a su tipo de datos.", Resp)
                    End If
                    If (Elementos(5).Trim <> "") Then
                        Try
                            Terceros.Impuestos.Traslados(Terceros.Impuestos.Traslados.Length - 1).tasa = CDec(Elementos(5))
                        Catch
                            ValidaCFDi.AgregaRespuesta("02-2", 4, "El contenido del documento TXT no es correcto.  El atributo 'tasa' de Traslado del Complemento PorCuentaDeTerceros tiene un valor no válido de acuerdo a su tipo de datos.", Resp)
                        End Try
                    Else
                        ValidaCFDi.AgregaRespuesta("02-2", 4, "El contenido del documento TXT no es correcto.  El atributo 'tasa' de Traslado del Complemento PorCuentaDeTerceros tiene un valor no válido de acuerdo a su tipo de datos.", Resp)
                    End If
                    If (Elementos(6).Trim <> "") Then
                        Try
                            Terceros.Impuestos.Traslados(Terceros.Impuestos.Traslados.Length - 1).importe = CDec(Elementos(6))
                        Catch ex As Exception
                            ValidaCFDi.AgregaRespuesta("02-2", 5, "El contenido del documento TXT no es correcto.  El atributo 'importe' de Traslado del Complemento PorCuentaDeTerceros tiene un valor no válido de acuerdo a su tipo de datos.", Resp)
                        End Try
                    End If
                Else
                    ValidaCFDi.AgregaRespuesta("02-2", 2, "El contenido del documento TXT no es correcto.  El Nodo Terceros está incompleto tiene un valor no válido.", Resp)
                End If

            ElseIf (Elementos(1) = "TERCEROS" And Elementos(2) = "FIN" And Elementos.Length = 3) Then
                Dim complCon As New ComprobanteConceptoComplementoConcepto()
                Dim d As New csUtilsCFD()
                Dim mensaje As String = ""
                ReDim complCon.Any(0)
                complCon.Any(0) = d.formaXmlTerceros(Terceros, mensaje)
                Dim c = comprobante.Conceptos(comprobante.Conceptos.Length - 1)
                If (c.Items Is Nothing) Then
                    ReDim c.Items(0)
                Else
                    ReDim Preserve c.Items(c.Items.Length)
                End If
                c.Items(c.Items.Length - 1) = complCon
                comprobante.Conceptos(comprobante.Conceptos.Length - 1) = c
                LlevaTerAduana = False
                LlevaTerParte = False
                LlevaTerPredial = False
                Terceros = Nothing
            Else
                ValidaCFDi.AgregaRespuesta("02-2", 0, "El contenido del documento TXT no es correcto.  El Nodo Terceros está incompleto tiene un valor no válido.", Resp)
            End If
        Catch ex As Exception
            ValidaCFDi.AgregaRespuesta("02-2", 0, ex.Message, Resp)
        End Try
    End Sub

    ''' <summary>
    ''' Metodo que valida la información del complemento VENTA DE VEHICULOS
    ''' </summary>
    ''' <param name="Elementos">Array de String que contiene los elementos de la sección</param>
    ''' <param name="Resp">Lista de RespuestaPremium a la que se añadiran lo errores</param>
    ''' <param name="Vehiculos">Objeto que contendra la información del complementos vehiculos</param>
    ''' <param name="comprobante">Objeto de tipo Comprobante que contiene la información del CFDI</param>
    ''' <param name="LlevaVeParte">Variable de tipo boolean que indicara si ya existe el nodo Parte</param>
    ''' <param name="LlevaVeAduana">Variable de tipo boolean que indicara si ya existe el nodo Aduana</param>
    ''' <remarks></remarks>
    Public Shared Sub ComplementoVENTAVEHICULOS(ByVal Elementos As String(), _
                                               ByRef Resp As List(Of RespuestaPremium), _
                                               ByRef Vehiculos As VentaVehiculos.VentaVehiculos, ByRef comprobante As Comprobante, _
                                               ByRef LlevaVeParte As Boolean, ByRef LlevaVeAduana As Boolean)
        Try
            If (Vehiculos Is Nothing) Then
                Vehiculos = New VentaVehiculos.VentaVehiculos
            End If

            If (Elementos(1) = "VEHICULOS" And Elementos.Length = 4) Then
                Vehiculos.version = "1.1"
                Vehiculos.ClaveVehicular = Elementos(2)
                csUtilsCFD.escribeAtributoConReglasA20CFDI("Clave Vehiculos", Vehiculos.ClaveVehicular, True, Resp, "02-3", 3)
                If (Vehiculos.ClaveVehicular = "") Then
                    ValidaCFDi.AgregaRespuesta("02-3", 3, "El contenido del documento TXT no es correcto.  El atributo 'Clave Vehicular' del Complemento Venta de Vehiculos tiene un valor no válido.", Resp)
                End If
                Vehiculos.Niv = Elementos(3)
                csUtilsCFD.escribeAtributoConReglasA20CFDI("Niv", Vehiculos.Niv, True, Resp, "02-3", 4)
                If (Vehiculos.Niv = "") Then
                    ValidaCFDi.AgregaRespuesta("02-3", 4, "El contenido del documento TXT no es correcto.  El atributo 'Niv' del Complemento Venta de Vehiculos tiene un valor no válido.", Resp)
                End If

            ElseIf (Elementos(1) = "VEHICULOS" And Elementos(2) = "INFOADUANERA" And Elementos.Length = 6 And LlevaVeParte = False) Then
                Dim infoaduana As New VentaVehiculos.t_InformacionAduanera()
                infoaduana.numero = Elementos(3)
                csUtilsCFD.escribeAtributoConReglasA20CFDI("Numero Aduana", infoaduana.numero, True, Resp, "02-3", 4)
                infoaduana.fecha = DateTime.ParseExact(Elementos(4), "yyyy-MM-dd", Nothing)
                If (Elementos(5).ToString.Trim <> "") Then
                    infoaduana.aduana = Elementos(5).ToString.Trim
                End If
                If (Vehiculos.Items Is Nothing) Then
                    ReDim Vehiculos.Items(0)
                Else
                    ReDim Preserve Vehiculos.Items(Vehiculos.Items.Length)
                End If
                Vehiculos.Items(Vehiculos.Items.Length - 1) = infoaduana
                LlevaVeAduana = True

            ElseIf (Elementos(1) = "VEHICULOS" And Elementos(2) = "PARTE" And Elementos.Length = 9 And LlevaVeAduana = False) Then
                Dim parteVehiculo As New VentaVehiculos.VentaVehiculosParte()
                Try
                    parteVehiculo.cantidad = Convert.ToDecimal(Elementos(3).Trim)
                Catch e As Exception
                    ValidaCFDi.AgregaRespuesta("02-3", 4, "El contenido del documento TXT no es correcto.  El atributo 'Cantidad' del Complemento Venta de Vehiculos tiene un valor no válido de acuerdo a su tipo de datos.", Resp)
                End Try
                If (Elementos(4).ToString.Trim <> "") Then
                    parteVehiculo.unidad = Elementos(4).ToString.Trim
                End If
                If (Elementos(5).ToString.Trim <> "") Then
                    parteVehiculo.noIdentificacion = Elementos(5).ToString.Trim
                End If
                parteVehiculo.descripcion = Elementos(6).ToString.Trim
                If (parteVehiculo.descripcion = "") Then
                    ValidaCFDi.AgregaRespuesta("02-3", 7, "El contenido del documento TXT no es correcto. El atributo 'descripcion' del Complemento Venta de Vehiculos tiene un valor no válido de acuerdo a su tipo de datos.", Resp)
                End If
                If (Elementos(7).ToString.Trim <> "") Then
                    Try
                        parteVehiculo.valorUnitario = CDec(Elementos(7).Trim)
                        parteVehiculo.valorUnitarioSpecified = True
                    Catch e As Exception
                        ValidaCFDi.AgregaRespuesta("02-3", 8, "El contenido del documento TXT no es correcto.  El atributo 'ValorUnitario' del Complemento Venta de Vehiculos tiene un valor no válido de acuerdo a su tipo de datos.", Resp)
                    End Try
                End If
                If (Elementos(8).ToString.Trim <> "") Then
                    Try
                        parteVehiculo.importe = CDec(Elementos(8).Trim)
                        parteVehiculo.importeSpecified = True
                    Catch e As Exception
                        ValidaCFDi.AgregaRespuesta("02-3", 9, "El contenido del documento TXT no es correcto.  El atributo 'importe' del Complemento Venta de Vehiculos tiene un valor no válido de acuerdo a su tipo de datos.", Resp)
                    End Try
                End If
                If (Vehiculos.Items Is Nothing) Then
                    ReDim Vehiculos.Items(0)
                Else
                    ReDim Preserve Vehiculos.Items(Vehiculos.Items.Length)
                End If
                Vehiculos.Items(Vehiculos.Items.Length - 1) = New VentaVehiculos.VentaVehiculosParte()
                Vehiculos.Items(Vehiculos.Items.Length - 1) = parteVehiculo
                LlevaVeParte = True

            ElseIf (Elementos(1) = "VEHICULOS" And Elementos(2) = "ADUANAPARTE" And Elementos.Length = 6 And LlevaVeParte = True) Then
                Dim infoaduana As New VentaVehiculos.t_InformacionAduanera()
                infoaduana.numero = Elementos(3)
                csUtilsCFD.escribeAtributoConReglasA20CFDI("Numero Aduana", infoaduana.numero, True, Resp, "02-3", 4)
                infoaduana.fecha = DateTime.ParseExact(Elementos(4), "yyyy-MM-dd", Nothing)
                If (Elementos(5).ToString.Trim <> "") Then
                    infoaduana.aduana = Elementos(5).ToString.Trim
                End If
                Dim parteVehiculo As New VentaVehiculos.VentaVehiculosParte()
                parteVehiculo = Vehiculos.Items(Vehiculos.Items.Length - 1)
                If (parteVehiculo.InformacionAduanera Is Nothing) Then
                    ReDim parteVehiculo.InformacionAduanera(0)
                Else
                    ReDim Preserve parteVehiculo.InformacionAduanera(parteVehiculo.InformacionAduanera.Length)
                End If
                parteVehiculo.InformacionAduanera(parteVehiculo.InformacionAduanera.Length - 1) = New VentaVehiculos.t_InformacionAduanera()
                parteVehiculo.InformacionAduanera(parteVehiculo.InformacionAduanera.Length - 1) = infoaduana


            ElseIf (Elementos(1) = "VEHICULOS" And Elementos(2) = "FIN" And Elementos.Length = 3) Then
                Dim complCon As New ComprobanteConceptoComplementoConcepto()
                Dim d As New csUtilsCFD()
                Dim mensaje As String = ""
                ReDim complCon.Any(0)
                complCon.Any(0) = d.formaXmlVehiculos(Vehiculos, mensaje)
                Dim c = comprobante.Conceptos(comprobante.Conceptos.Length - 1)
                If (c.Items Is Nothing) Then
                    ReDim c.Items(0)
                Else
                    ReDim Preserve c.Items(c.Items.Length)
                End If
                c.Items(c.Items.Length - 1) = complCon
                comprobante.Conceptos(comprobante.Conceptos.Length - 1) = c
                LlevaVeAduana = False
                LlevaVeParte = False
                Vehiculos = Nothing
            Else
                ValidaCFDi.AgregaRespuesta("02-3", 2, "El contenido del documento TXT no es correcto.  El Nodo Venta de Vehiculos está incompleto tiene un valor no válido.", Resp)
            End If
        Catch ex As Exception
            ValidaCFDi.AgregaRespuesta("02-3", 0, ex.Message, Resp)
        End Try
    End Sub

    ''' <summary>
    ''' Metodo que valida la información del complemento OTROS DERECHOS E IMPUESTOS
    ''' </summary>
    ''' <param name="Elementos">Array de String que contiene los elementos de la sección</param>
    ''' <param name="Resp">Lista de RespuestaPremium a la que se añadiran los errores</param>
    ''' <param name="primeraVezImp">Variable de tipo bool que indicara si el impuesto fue añadido por primera vez</param>
    ''' <param name="impLocal">Objeto que contendra la información del complemento impuestos locales</param>
    ''' <remarks></remarks>
    Public Shared Sub ComplementoIMPLOCALES(ByVal Elementos As String(), ByRef Resp As List(Of RespuestaPremium), _
                                            ByRef primeraVezImp As Boolean, ByRef impLocal As ImpuestosLocales)
        Try
            If (Elementos(0) = "04" And Elementos.Length = 5) Then

                If (primeraVezImp = True) Then
                    primeraVezImp = False

                    If (Elementos(1) = "1.0") Then 'Version
                        impLocal.version = Trim(Elementos(1))
                    Else
                        ValidaCFDi.AgregaRespuesta("04", 2, "El contenido del documento TXT no es correcto, la versión para impuestos locales no es 1.0", Resp)
                    End If
                    If (IsNumeric(Elementos(2))) Then 'Total de Retenciones
                        impLocal.TotaldeRetenciones = Math.Round(CDec(Elementos(2)), 2)
                    Else
                        ValidaCFDi.AgregaRespuesta("04", 3, "El contenido del documento TXT no es correcto, el total de retenidos para impuestos locales no es numérico", Resp)
                    End If
                    If (IsNumeric(Elementos(3))) Then 'Total de Trasladados
                        impLocal.TotaldeTraslados = Math.Round(CDec(Elementos(3)), 2)
                    Else
                        ValidaCFDi.AgregaRespuesta("04", 4, "El contenido del documento TXT no es correcto, el total de trasladados para impuestos locales no es numérico", Resp)
                    End If
                Else
                    If (Elementos(1).Trim() = "T") Then

                        If (impLocal.TrasladosLocales Is Nothing) Then
                            ReDim impLocal.TrasladosLocales(0)
                        Else
                            ReDim Preserve impLocal.TrasladosLocales(impLocal.TrasladosLocales.Length)
                        End If

                        Dim impLocalTraslado As ImpuestosLocalesTrasladosLocales = New ImpuestosLocalesTrasladosLocales()
                        impLocalTraslado.ImpLocTrasladado = Elementos(2)
                        csUtilsCFD.escribeAtributoConReglasA20CFDI("ImpLocTrasladado", impLocalTraslado.ImpLocTrasladado, True, Resp, "04", 3)
                        If (impLocalTraslado.ImpLocTrasladado = "") Then
                            ValidaCFDi.AgregaRespuesta("04", 3, "El contenido del documento txt no es correcto, el atributo ImpLocalTrasladado contiene valores incorrectos", Resp)
                        End If

                        If (IsNumeric(Elementos(3))) Then
                            impLocalTraslado.TasadeTraslado = CDec(Elementos(3))
                        Else
                            ValidaCFDi.AgregaRespuesta("04", 4, "El contenido del documento txt no es correcto, el atributo tasaTraslado en impuestos locales contiene valores incorrectos", Resp)
                        End If

                        If (IsNumeric(Elementos(4))) Then
                            impLocalTraslado.Importe = Math.Round(CDec(Elementos(4)), 2)
                        Else
                            ValidaCFDi.AgregaRespuesta("04", 5, "El contenido del documento txt no es correcto, el atributo tasaTraslado en impuestos locales contiene valores incorrectos", Resp)
                        End If
                        impLocal.TrasladosLocales(impLocal.TrasladosLocales.Length - 1) = impLocalTraslado

                    ElseIf (Elementos(1).Trim() = "R") Then 'Si es retenido

                        If (impLocal.RetencionesLocales Is Nothing) Then 'Redimensionamos el vector
                            ReDim impLocal.RetencionesLocales(0)
                        Else 'Agregamos uno
                            ReDim Preserve impLocal.RetencionesLocales(impLocal.RetencionesLocales.Length)
                        End If


                        Dim impLocalRetenido As ImpuestosLocalesRetencionesLocales = New ImpuestosLocalesRetencionesLocales()
                        impLocalRetenido.ImpLocRetenido = Elementos(2)
                        csUtilsCFD.escribeAtributoConReglasA20CFDI("ImpLocTrasladado", impLocalRetenido.ImpLocRetenido, True, Resp, "04", 3)
                        If (impLocalRetenido.ImpLocRetenido = "") Then
                            ValidaCFDi.AgregaRespuesta("04", 3, "El contenido del documento txt no es correcto, el atributo impLocalRetenido contiene valores incorrectos", Resp)
                        End If

                        If (IsNumeric(Elementos(3))) Then
                            impLocalRetenido.TasadeRetencion = CDec(Elementos(3))
                        Else
                            ValidaCFDi.AgregaRespuesta("04", 4, "El contenido del documento txt no es correcto, el atributo tasaTraslado en impuestos locales contiene valores incorrectos", Resp)
                        End If

                        If (IsNumeric(Elementos(4))) Then
                            impLocalRetenido.Importe = Math.Round(CDec(Elementos(4)), 2)
                        Else
                            ValidaCFDi.AgregaRespuesta("04", 5, "El contenido del documento txt no es correcto, el atributo tasaTraslado en impuestos locales contiene valores incorrectos", Resp)
                        End If
                        impLocal.RetencionesLocales(impLocal.RetencionesLocales.Length - 1) = impLocalRetenido
                    Else
                        ValidaCFDi.AgregaRespuesta("04", 2, "El contenido del documento TXT no es correcto, no se especifica el tipo de Impuesto local T o R", Resp)
                    End If
                End If
            Else
                ValidaCFDi.AgregaRespuesta("04", 0, "El contenido del documento TXT no es correcto. La seccion 04 no corresponde con el formato especificado", Resp)
            End If
        Catch ex As Exception
            ValidaCFDi.AgregaRespuesta("04", 0, ex.Message, Resp)
        End Try
    End Sub

    ''' <summary>
    ''' Metodo que valida la información del complemento RECIBO DE PAGO DE NOMINA
    ''' </summary>
    ''' <param name="Elementos">Array de String que contiene los elementos de la sección</param>
    ''' <param name="Resp">Lista de RespuestaPremium a la que se añadiran los errores</param>
    ''' <param name="Nomina">Objeto que contandra la información del complemento nomina</param>
    ''' <param name="tipoCfd">Variable que contiene el tipo de comprobante</param>
    ''' <param name="primeraVezNom">Variable de tipo boolean que indica si es la primera vez que se procesa una secció de nomina</param>
    ''' <param name="TGPercepcion">Variable de tipo decimal que indica el total gravado de percepciones</param>
    ''' <param name="TEPercepcion">Variable de tipo decimal que indica el total exento de percepciones</param>
    ''' <param name="TGDeduccion">Variable de tipo decimal que indica el total gravado de deducciones</param>
    ''' <param name="TEDeduccion">Variable de tipo decimal que indica el total exento de deducciones</param>
    ''' <remarks></remarks>
    Public Shared Sub ComplementoNOMINA(ByVal Elementos As String(), ByRef Resp As List(Of RespuestaPremium), _
                                        ByRef Nomina As Nomina.Nomina, ByVal tipoCfd As String, _
                                        ByRef primeraVezNom As Boolean, ByRef TGPercepcion As Decimal, _
                                        ByRef TEPercepcion As Decimal, ByRef TGDeduccion As Decimal, _
                                        ByRef TEDeduccion As Decimal)
        Try
            If (Elementos(0) = "09" And tipoCfd = "RN") Then
                If (Elementos.Length = 30 And Elementos(1).ToUpper() = "NOMINA") Then 'Encabezado de nomina
                    primeraVezNom = False
                    'Llenamos el elemento NOMINA
                    Nomina.Version = Elementos(2)
                    csUtilsCFD.escribeAtributoConReglasA20CFDI("version", Nomina.Version, True, Resp, "09", 3)
                    If (Nomina.Version = "") Then
                        ValidaCFDi.AgregaRespuesta("09", 3, "El contenido del documento TXT no es correcto.  El atributo 'Versión' tiene un valor no válido de acuerdo a su tipo de datos. Seccion Nomina", Resp)
                    End If

                    If (Trim(Elementos(3)).Length > 0) Then
                        If (Trim(Elementos(3)).Length > 20) Then
                            ValidaCFDi.AgregaRespuesta("09", 4, "El contenido del documento TXT no es correcto. El atributo 'Registro Patronal' tiene un valor no válido debe contener máximo 20 caracteres. Seccion Nomina", Resp)
                        End If
                        Nomina.RegistroPatronal = Elementos(3)
                        csUtilsCFD.escribeAtributoConReglasA20CFDI("Registro Patronal", Nomina.RegistroPatronal, False, Resp, "09", 4)
                    End If

                    If (Trim(Elementos(4)).Length > 15) Then
                        ValidaCFDi.AgregaRespuesta("09", 0, "El contenido del documento TXT no es correcto.  El atributo 'Número de Empleado' tiene un valor no válido debe contener máximo 15 caracteres. Seccion Nomina", Resp)
                    Else
                        Nomina.NumEmpleado = Elementos(4)
                        csUtilsCFD.escribeAtributoConReglasA20CFDI("Número Empleado", Nomina.NumEmpleado, True, Resp, "09", 5)
                        If (Nomina.NumEmpleado = "") Then
                            ValidaCFDi.AgregaRespuesta("09", 5, "El contenido del documento TXT no es correcto.  El atributo 'Número de Empleado' tiene un valor no válido de acuerdo a su tipo de datos. Seccion Nomina", Resp)
                        End If
                    End If

                    If (csValidaciones.valida_CURP(Elementos(5))) Then
                        Nomina.CURP = Elementos(5)
                    Else
                        ValidaCFDi.AgregaRespuesta("09", 6, "El contenido del documento TXT no es correcto.  El atributo 'CURP' tiene un valor no válido de acuerdo a su tipo de datos. Seccion Nomina", Resp)
                    End If

                    Try
                        Nomina.TipoRegimen = CInt(Elementos(6))
                    Catch e As Exception
                        ValidaCFDi.AgregaRespuesta("09", 7, "Ocurrio el siguiente error al obtener 'Tipo Regimen': " & e.Message, Resp)
                    End Try

                    If (Trim(Elementos(7)).Length > 0) Then
                        Nomina.NumSeguridadSocial = Elementos(7)
                        csUtilsCFD.escribeAtributoConReglasA20CFDI("Número Seguridad Social", Nomina.NumSeguridadSocial, False, Resp, "09", 8)
                    End If

                    If (Trim(Elementos(8)).Length > 0) Then
                        Try
                            Nomina.FechaPago = CDate(Elementos(8))
                        Catch e As Exception
                            ValidaCFDi.AgregaRespuesta("09", 9, "Ocurrio el siguiente error al obtener 'Fecha Pago': " & e.Message, Resp)
                        End Try
                    Else
                        ValidaCFDi.AgregaRespuesta("09", 9, "El contenido del documento TXT no es correcto. El atributo 'Fecha Pago' tiene un valor no válido de acuerdo a su tipo de datos. Seccion Nomina", Resp)
                    End If

                    If (Trim(Elementos(9)).Length > 0) Then
                        Try
                            Nomina.FechaInicialPago = CDate(Elementos(9))
                        Catch e As Exception
                            ValidaCFDi.AgregaRespuesta("09", 10, "Ocurrio el siguiente error al obtener 'Fecha Inicial Pago': " & e.Message, Resp)
                        End Try
                    Else
                        ValidaCFDi.AgregaRespuesta("09", 10, "El contenido del documento TXT no es correcto. El atributo 'Fecha Inicial Pago' tiene un valor no válido de acuerdo a su tipo de datos. Seccion Nomina", Resp)
                    End If

                    If (Trim(Elementos(10)).Length > 0) Then
                        Try
                            Nomina.FechaFinalPago = CDate(Elementos(10))
                        Catch e As Exception
                            ValidaCFDi.AgregaRespuesta("09", 11, "Ocurrio el siguiente error al obtener 'Fecha Final Pago': " & e.Message, Resp)
                        End Try
                    Else
                        ValidaCFDi.AgregaRespuesta("09", 11, "El contenido del documento TXT no es correcto. El atributo 'Fecha Final Pago' tiene un valor no válido de acuerdo a su tipo de datos. Seccion Nomina", Resp)
                    End If

                    Try
                        Nomina.NumDiasPagados = CDec(Elementos(11))
                    Catch ex As Exception
                        ValidaCFDi.AgregaRespuesta("09", 12, "El contenido del documento TXT no es correcto.  El atributo 'Número de Dias Pagados' tiene un valor no válido de acuerdo a su tipo de datos. Seccion Nomina", Resp)
                    End Try

                    If (Trim(Elementos(12)).Length > 0) Then
                        If (Trim(Elementos(12)).Length > 100) Then
                            ValidaCFDi.AgregaRespuesta("09", 13, "El contenido del documento TXT no es correcto.  El atributo 'Departamento' tiene un valor no válido debe contener máximo 100 caracteres. Seccion Nomina", Resp)
                        Else
                            Nomina.Departamento = Elementos(12)
                            csUtilsCFD.escribeAtributoConReglasA20CFDI("Departamento", Nomina.Departamento, False, Resp, "09", 13)
                        End If
                    End If

                    If (Trim(Elementos(13)).Length > 0) Then
                        Nomina.CLABE = Elementos(13)
                        If Not (csValidaciones.valida_CLABE(Nomina.CLABE)) Then
                            ValidaCFDi.AgregaRespuesta("09", 14, "El contenido del documento TXT no es correcto.  El atributo 'CLABE' tiene un valor no válido de acuerdo a su tipo de datos. Seccion Nomina", Resp)
                        End If
                    End If

                    If (Trim(Elementos(14)).Length > 0) Then
                        Nomina.Banco = Elementos(14)
                        If Not (csValidaciones.valida_Banco_Per_Dec(Nomina.Banco)) Then
                            ValidaCFDi.AgregaRespuesta("09", 15, "El contenido del documento TXT no es correcto.  El atributo 'Banco' tiene un valor no válido de acuerdo a su tipo de datos. Seccion Nomina", Resp)
                        Else
                            Nomina.BancoSpecified = True
                        End If
                    End If

                    If (Trim(Elementos(15)).Length > 0) Then
                        Try
                            Nomina.FechaInicioRelLaboral = CDate(Elementos(15))
                            Nomina.FechaInicioRelLaboralSpecified = True
                        Catch e As Exception
                            ValidaCFDi.AgregaRespuesta("09", 16, "Ocurrio el siguiente error al obtener 'Fecha Inicio Relación Laboral': " & e.Message, Resp)
                        End Try
                    End If

                    If (Trim(Elementos(16)).Length > 0) Then
                        Try
                            Nomina.Antiguedad = CInt(Elementos(16))
                            Nomina.AntiguedadSpecified = True
                        Catch ex As Exception
                            ValidaCFDi.AgregaRespuesta("09", 17, "El contenido del documento TXT no es correcto.  El atributo 'Antigüedad' tiene un valor no válido de acuerdo a su tipo de datos. Seccion Nomina", Resp)
                        End Try
                    End If

                    If (Trim(Elementos(17)).Length > 0) Then
                        Nomina.Puesto = Elementos(17)
                        csUtilsCFD.escribeAtributoConReglasA20CFDI("Puesto", Nomina.Puesto, False, Resp, "09", 18)
                    End If

                    If (Trim(Elementos(18)).Length > 0) Then
                        Nomina.TipoContrato = Elementos(18)
                        csUtilsCFD.escribeAtributoConReglasA20CFDI("Tipo Contrato", Nomina.TipoContrato, False, Resp, "09", 19)
                    End If

                    If (Trim(Elementos(19)).Length > 0) Then
                        Nomina.TipoJornada = Elementos(19)
                        csUtilsCFD.escribeAtributoConReglasA20CFDI("Tipo Jornada", Nomina.TipoJornada, False, Resp, "09", 20)
                    End If

                    Nomina.PeriodicidadPago = Elementos(20)
                    csUtilsCFD.escribeAtributoConReglasA20CFDI("Periodicidad Pago", Nomina.PeriodicidadPago, True, Resp, "09", 21)
                    If (Nomina.PeriodicidadPago = "" Or Nomina.PeriodicidadPago.Length > 100) Then
                        ValidaCFDi.AgregaRespuesta("09", 21, "El contenido del documento TXT no es correcto.  El atributo 'Periodicidad Pago' tiene un valor no válido de acuerdo a su tipo de datos. Seccion Nomina", Resp)
                    End If

                    If (Trim(Elementos(21)).Length > 0) Then
                        Try
                            Nomina.SalarioBaseCotApor = CDec(Elementos(21))
                            Nomina.SalarioBaseCotAporSpecified = True
                        Catch ex As Exception
                            ValidaCFDi.AgregaRespuesta("09", 22, "El contenido del documento TXT no es correcto.  El atributo 'Salario Base' tiene un valor no válido de acuerdo a su tipo de datos. Seccion Nomina", Resp)
                        End Try
                    End If

                    If (Trim(Elementos(22)).Length > 0) Then
                        If (Trim(Elementos(22)).Length > 1) Then
                            ValidaCFDi.AgregaRespuesta("09", 23, "El contenido del documento TXT no es correcto.  El atributo 'Riesgo Puesto' debe tener como maximo 1 caracter de longitud. Seccion Nomina", Resp)
                        Else
                            Try
                                Nomina.RiesgoPuesto = CInt(Elementos(22))
                                csUtilsCFD.escribeAtributoConReglasA20CFDI("Riesgo Puesto", Nomina.RiesgoPuesto, False, Resp, "09", 23)
                                Nomina.RiesgoPuestoSpecified = True
                            Catch ex As Exception
                                ValidaCFDi.AgregaRespuesta("09", 23, "El contenido del documento TXT no es correcto.  El atributo 'Riesgo Puesto' tiene un valor no válido de acuerdo a su tipo de datos. Seccion Nomina", Resp)
                            End Try
                        End If
                    End If

                    If (Trim(Elementos(23)).Length > 0) Then
                        Try
                            Nomina.SalarioDiarioIntegrado = CDec(Elementos(23))
                            Nomina.SalarioDiarioIntegradoSpecified = True
                        Catch ex As Exception
                            ValidaCFDi.AgregaRespuesta("09", 24, "El contenido del documento TXT no es correcto.  El atributo 'Salario Diario' tiene un valor no válido de acuerdo a su tipo de datos. Seccion Nomina", Resp)
                        End Try
                    End If
                    If (Elementos(24).ToUpper() = "TPERCEPCIONES") Then
                        Try
                            TGPercepcion = CDec(Elementos(25))
                        Catch ex As Exception
                            ValidaCFDi.AgregaRespuesta("09", 26, "El contenido del documento TXT no es correcto.  El atributo 'Total Gravado de Percepciones' tiene un valor no válido de acuerdo a su tipo de datos. Seccion Nomina", Resp)
                        End Try

                        Try
                            TEPercepcion = CDec(Elementos(26))
                        Catch ex As Exception
                            ValidaCFDi.AgregaRespuesta("09", 27, "El contenido del documento TXT no es correcto.  El atributo 'Total Exento de Percepciones' tiene un valor no válido de acuerdo a su tipo de datos. Seccion Nomina", Resp)
                        End Try
                    Else
                        ValidaCFDi.AgregaRespuesta("09", 25, "El contenido del documento TXT no es correcto.  El Encabezado no contiene el Indicador TPERCEPCIONES.", Resp)
                    End If

                    If (Elementos(27).ToUpper() = "TDEDUCCIONES") Then
                        Try
                            TGDeduccion = CDec(Elementos(28))
                        Catch ex As Exception
                            ValidaCFDi.AgregaRespuesta("09", 28, "El contenido del documento TXT no es correcto.  El atributo 'Total Gravado de Deducciones' tiene un valor no válido de acuerdo a su tipo de datos. Seccion Nomina", Resp)
                        End Try

                        Try
                            TEDeduccion = CDec(Elementos(29))
                        Catch ex As Exception
                            ValidaCFDi.AgregaRespuesta("09", 30, "El contenido del documento TXT no es correcto.  El atributo 'Total Exento de Deducciones' tiene un valor no válido de acuerdo a su tipo de datos. Seccion Nomina", Resp)
                        End Try
                    Else
                        ValidaCFDi.AgregaRespuesta("09", 28, "El contenido del documento TXT no es correcto.  El Encabezado no contiene el Indicador TDEDUCCIONES.", Resp)
                    End If

                ElseIf (Elementos.Length = 8 And Trim(Elementos(1)).ToUpper = "DETNOMINA" And Trim(Elementos(2)).ToUpper = "PERCEPCION") Then
                    'Llenamos Percepciones y Deducciones
                    If (Nomina.Percepciones Is Nothing) Then
                        Nomina.Percepciones = New Nomina.NominaPercepciones()
                        Nomina.Percepciones.TotalGravado = TGPercepcion
                        Nomina.Percepciones.TotalExento = TEPercepcion
                    End If
                    Dim Percepcion As New Nomina.NominaPercepcionesPercepcion()

                    Percepcion.TipoPercepcion = Trim(Elementos(3))
                    If Not (csValidaciones.valida_Banco_Per_Dec(Percepcion.TipoPercepcion)) Then
                        ValidaCFDi.AgregaRespuesta("09", 4, "El contenido del documento TXT no es correcto.  El atributo 'Tipo Percepcion' tiene un valor no válido de acuerdo a su tipo de datos. Seccion Nomina", Resp)
                    End If

                    Percepcion.Clave = Elementos(4)
                    If (Percepcion.Clave.Length < 3) Then
                        ValidaCFDi.AgregaRespuesta("09", 5, "El contenido del documento TXT no es correcto.  El atributo 'Clave Percepcion' debe tener minimo 3 caracteres. Seccion Nomina", Resp)
                    Else
                        If (Percepcion.Clave.Length > 15) Then
                            ValidaCFDi.AgregaRespuesta("09", 5, "El contenido del documento TXT no es correcto.  El atributo 'Clave Percepcion' debe tener maximo 15 caracteres. Seccion Nomina", Resp)
                        End If
                    End If
                    csUtilsCFD.escribeAtributoConReglasA20CFDI("Clave", Percepcion.Clave, True, Resp, "09", 5)

                    Percepcion.Concepto = Elementos(5)
                    If (Percepcion.Concepto.Length > 100) Then
                        ValidaCFDi.AgregaRespuesta("09", 6, "El contenido del documento TXT no es correcto.  El atributo 'Concepto Percepcion' debe tener maximo 100 caracteres. Seccion Nomina", Resp)
                    End If
                    csUtilsCFD.escribeAtributoConReglasA20CFDI("Concepto", Percepcion.Concepto, True, Resp, "09", 6)

                    Try
                        Percepcion.ImporteGravado = CDec(Elementos(6))
                    Catch ex As Exception
                        ValidaCFDi.AgregaRespuesta("09", 7, "El contenido del documento TXT no es correcto.  El atributo 'Importe Gravado de Percepcion' tiene un valor no válido de acuerdo a su tipo de datos. Sección Nomina", Resp)
                    End Try

                    Try
                        Percepcion.ImporteExento = CDec(Elementos(7))
                    Catch ex As Exception
                        ValidaCFDi.AgregaRespuesta("09", 8, "El contenido del documento TXT no es correcto.  El atributo 'Importe Exento de Percepcion' tiene un valor no válido de acuerdo a su tipo de datos. Sección Nomina", Resp)
                    End Try

                    If (Nomina.Percepciones.Percepcion Is Nothing) Then
                        ReDim Nomina.Percepciones.Percepcion(0)
                    Else
                        ReDim Preserve Nomina.Percepciones.Percepcion(Nomina.Percepciones.Percepcion.Length)
                    End If

                    Nomina.Percepciones.Percepcion(Nomina.Percepciones.Percepcion.Length - 1) = Percepcion

                ElseIf (Elementos.Length = 8 And Trim(Elementos(1)).ToUpper = "DETNOMINA" And Trim(Elementos(2)).ToUpper = "DEDUCCION") Then
                    'Llenamos Percepciones y Deducciones

                    If (Nomina.Deducciones Is Nothing) Then
                        Nomina.Deducciones = New Nomina.NominaDeducciones()
                        Nomina.Deducciones.TotalGravado = TGDeduccion
                        Nomina.Deducciones.TotalExento = TEDeduccion
                    End If
                    Dim Deduccion As New Nomina.NominaDeduccionesDeduccion()

                    Deduccion.TipoDeduccion = Trim(Elementos(3))
                    If Not (csValidaciones.valida_Banco_Per_Dec(Deduccion.TipoDeduccion)) Then
                        ValidaCFDi.AgregaRespuesta("09", 4, "El contenido del documento TXT no es correcto.  El atributo 'Tipo Deduccion' tiene un valor no válido de acuerdo a su tipo de datos. Seccion Nomina", Resp)
                    End If

                    Deduccion.Clave = Elementos(4)
                    If (Deduccion.Clave.Length < 3) Then
                        ValidaCFDi.AgregaRespuesta("09", 5, "El contenido del documento TXT no es correcto.  El atributo 'Clave Deduccion' debe tener minimo 3 caracteres. Seccion Nomina", Resp)
                    Else
                        If (Deduccion.Clave.Length > 15) Then
                            ValidaCFDi.AgregaRespuesta("09", 5, "El contenido del documento TXT no es correcto.  El atributo 'Clave Deduccion' debe tener maximo 15 caracteres. Seccion Nomina", Resp)
                        End If
                    End If
                    csUtilsCFD.escribeAtributoConReglasA20CFDI("Clave", Deduccion.Clave, True, Resp, "09", 5)

                    Deduccion.Concepto = Elementos(5)
                    If (Deduccion.Concepto.Length > 100) Then

                        ValidaCFDi.AgregaRespuesta("09", 6, "El contenido del documento TXT no es correcto.  El atributo 'Concepto Deduccion' debe tener maximo 100 caracteres. Seccion Nomina", Resp)
                    End If
                    csUtilsCFD.escribeAtributoConReglasA20CFDI("Concepto", Deduccion.Concepto, True, Resp, "09", 6)

                    Try
                        Deduccion.ImporteGravado = CDec(Elementos(6))
                    Catch ex As Exception
                        ValidaCFDi.AgregaRespuesta("09", 7, "El contenido del documento TXT no es correcto.  El atributo 'Importe Gravado de Deduccion' tiene un valor no válido de acuerdo a su tipo de datos. Sección Nomina", Resp)
                    End Try

                    Try
                        Deduccion.ImporteExento = CDec(Elementos(7))
                    Catch ex As Exception
                        ValidaCFDi.AgregaRespuesta("09", 8, "El contenido del documento TXT no es correcto.  El atributo 'Importe Exento de Deduccion' tiene un valor no válido de acuerdo a su tipo de datos. Sección Nomina", Resp)
                    End Try

                    If (Nomina.Deducciones.Deduccion Is Nothing) Then
                        ReDim Nomina.Deducciones.Deduccion(0)
                    Else
                        ReDim Preserve Nomina.Deducciones.Deduccion(Nomina.Deducciones.Deduccion.Length)
                    End If

                    Nomina.Deducciones.Deduccion(Nomina.Deducciones.Deduccion.Length - 1) = Deduccion

                ElseIf (Elementos.Length = 5 And Trim(Elementos(1)).ToUpper = "INCAPACIDAD") Then
                    'Llenamos Incapacidades

                    Dim Incapacidad As New Nomina.NominaIncapacidad()

                    Try
                        Incapacidad.DiasIncapacidad = CDec(Elementos(2))
                    Catch ex As Exception
                        ValidaCFDi.AgregaRespuesta("09", 3, "El contenido del documento TXT no es correcto.  El atributo 'Dias Incapacidad' tiene un valor no válido de acuerdo a su tipo de datos. Sección Nomina", Resp)
                    End Try

                    Try
                        Incapacidad.TipoIncapacidad = CInt(Elementos(3))
                    Catch ex As Exception
                        ValidaCFDi.AgregaRespuesta("09", 4, "El contenido del documento TXT no es correcto.  El atributo 'Tipo Incapacidad' tiene un valor no válido de acuerdo a su tipo de datos. Sección Nomina", Resp)
                    End Try

                    Try
                        Incapacidad.Descuento = CDec(Elementos(4))
                    Catch ex As Exception
                        ValidaCFDi.AgregaRespuesta("09", 5, "El contenido del documento TXT no es correcto.  El atributo 'Tipo Incapacidad' tiene un valor no válido de acuerdo a su tipo de datos. Sección Nomina", Resp)
                    End Try

                    If (Nomina.Incapacidades Is Nothing) Then
                        ReDim Nomina.Incapacidades(0)
                    Else
                        ReDim Preserve Nomina.Incapacidades(Nomina.Incapacidades.Length)
                    End If

                    Nomina.Incapacidades(Nomina.Incapacidades.Length - 1) = Incapacidad

                ElseIf (Elementos.Length = 6 And Trim(Elementos(1)).ToUpper = "HORASEXTRA") Then
                    'Llenamos Horas Extra

                    Dim Hora_Extra As New Nomina.NominaHorasExtra()

                    Try
                        Hora_Extra.Dias = CInt(Elementos(2))
                    Catch ex As Exception
                        ValidaCFDi.AgregaRespuesta("09", 3, "El contenido del documento TXT no es correcto.  El atributo 'Dias Horas Extra' tiene un valor no válido de acuerdo a su tipo de datos. Sección Nomina", Resp)
                    End Try

                    If (Trim(Elementos(3)).ToUpper = "" Or (Trim(Elementos(3)).ToUpper <> "DOBLES" And Trim(Elementos(3)).ToUpper <> "TRIPLES")) Then
                        ValidaCFDi.AgregaRespuesta("09", 4, "El contenido del documento TXT no es correcto.  El atributo 'Tipo Horas Extra' tiene un valor no válido de acuerdo a su tipo de datos. Sección Nomina", Resp)
                    Else
                        Select Case Trim(Elementos(3)).ToUpper
                            Case "DOBLES"
                                Hora_Extra.TipoHoras = WSPremium.Nomina.NominaHorasExtraTipoHoras.Dobles
                            Case "TRIPLES"
                                Hora_Extra.TipoHoras = WSPremium.Nomina.NominaHorasExtraTipoHoras.Triples
                        End Select
                    End If

                    Try
                        Hora_Extra.HorasExtra = CInt(Elementos(4))
                    Catch ex As Exception
                        ValidaCFDi.AgregaRespuesta("09", 5, "El contenido del documento TXT no es correcto.  El atributo 'Horas Extra' tiene un valor no válido de acuerdo a su tipo de datos. Sección Nomina", Resp)
                    End Try

                    Try
                        Hora_Extra.ImportePagado = CDec(Elementos(5))
                    Catch ex As Exception
                        ValidaCFDi.AgregaRespuesta("09", 6, "El contenido del documento TXT no es correcto.  El atributo 'Importe Pagado' tiene un valor no válido de acuerdo a su tipo de datos. Sección Nomina", Resp)
                    End Try

                    If (Nomina.HorasExtras Is Nothing) Then
                        ReDim Nomina.HorasExtras(0)
                    Else
                        ReDim Preserve Nomina.HorasExtras(Nomina.HorasExtras.Length)
                    End If

                    Nomina.HorasExtras(Nomina.HorasExtras.Length - 1) = Hora_Extra

                Else
                    ValidaCFDi.AgregaRespuesta("09", 2, "El contenido del documento TXT no es correcto. alguna de las secciones no corresponde con el formato especificado en la sección de nomina.", Resp)
                End If
            Else
                ValidaCFDi.AgregaRespuesta("09", 0, "El contenido del documento TXT no es correcto. La seccion 09 no corresponde con el formato especificado", Resp)
            End If
        Catch ex As Exception
            ValidaCFDi.AgregaRespuesta("09", 0, ex.Message, Resp)
        End Try
    End Sub

    ''' <summary>
    ''' Metodo que valida la información del complemento SECTOR DE VENTAS AL DETALLE (DETALLISTA)
    ''' </summary>
    ''' <param name="Elementos">Array de String que contiene los elementos de la sección</param>
    ''' <param name="Resp">Lista de RespuestaPremium a la que se añadiran los errores</param>
    ''' <param name="primeraVezDeta">Variable de tipo boolean que indicara si es la primera sección del complemento detallista</param>
    ''' <param name="Detallista">Objeto que contendra la información del complemento detallista</param>
    ''' <param name="tipoCFD">Variable que contendra el tipo de comprobante</param>
    ''' <param name="Comprobante">Objeto de tipo Comprobante que contiene la información del CFDI</param>
    ''' <remarks></remarks>
    Public Shared Sub ComplementoDETALLISTA(ByVal Elementos As String(), ByRef Resp As List(Of RespuestaPremium), _
                                            ByRef primeraVezDeta As Boolean, ByRef Detallista As Detallista.detallista, _
                                            ByVal tipoCFD As String, ByVal Comprobante As Comprobante)
        Try
            If (Elementos(0).Trim = "11") Then
                If (Elementos.Length = 6 And Elementos(1).Trim.ToUpper() = "DETALLISTA" And Elementos(2).Trim.ToUpper() <> "ORDERID" And _
                    Elementos(2).Trim.ToUpper() <> "SELLER" And Elementos(2).Trim.ToUpper() <> "TOTALALLOWANCECHARGE") Then 'Encabezado de nomina
                    primeraVezDeta = False
                    'Llenamos el elemento Detallista
                    If (Elementos(2).Trim <> "") Then
                        If (Elementos(2).Trim = "SimpleInvoiceType") Then
                            Detallista.type = Elementos(2).Trim.ToString()
                        Else
                            ValidaCFDi.AgregaRespuesta("11", 3, "El tipo especificado para el complemento detallista no es valido (2).", Resp)
                        End If
                    End If
                    If (Elementos(3).Trim <> "") Then
                        Detallista.contentVersion = Elementos(3).Trim
                    End If
                    If (Elementos(4).Trim = "") Then
                        ValidaCFDi.AgregaRespuesta("11", 5, "No indico el dato documentStructureVersion (4) en el complemento detallista.", Resp)
                    Else
                        Detallista.documentStructureVersion = Elementos(4).Trim
                    End If
                    If (Elementos(5).Trim = "") Then
                        ValidaCFDi.AgregaRespuesta("11", 6, "Debe indicar el dato documentStatus (5) en el complemento detallista.", Resp)
                    Else
                        Select Case Elementos(5).Trim.ToUpper
                            Case "ORIGINAL"
                                Detallista.documentStatus = WSPremium.Detallista.detallistaDocumentStatus.ORIGINAL
                            Case "COPY"
                                Detallista.documentStatus = WSPremium.Detallista.detallistaDocumentStatus.COPY
                            Case "REEMPLAZA"
                                Detallista.documentStatus = WSPremium.Detallista.detallistaDocumentStatus.REEMPLAZA
                            Case "DELETE"
                                Detallista.documentStatus = WSPremium.Detallista.detallistaDocumentStatus.DELETE
                            Case Else
                                ValidaCFDi.AgregaRespuesta("11", 6, "Debe indicar un valor correcto en el campo documentStatus de la seccion DETALLISTA", Resp)
                        End Select
                    End If
                    Detallista.requestForPaymentIdentification = New Detallista.detallistaRequestForPaymentIdentification
                    Select Case tipoCFD
                        Case "FA"
                            Detallista.requestForPaymentIdentification.entityType = WSPremium.Detallista.detallistaRequestForPaymentIdentificationEntityType.INVOICE
                        Case "CR"
                            Detallista.requestForPaymentIdentification.entityType = WSPremium.Detallista.detallistaRequestForPaymentIdentificationEntityType.CREDIT_NOTE
                        Case "CA"
                            Detallista.requestForPaymentIdentification.entityType = WSPremium.Detallista.detallistaRequestForPaymentIdentificationEntityType.DEBIT_NOTE
                        Case "RH"
                            Detallista.requestForPaymentIdentification.entityType = WSPremium.Detallista.detallistaRequestForPaymentIdentificationEntityType.HONORARY_RECEIPT
                        Case "CP"
                            Detallista.requestForPaymentIdentification.entityType = WSPremium.Detallista.detallistaRequestForPaymentIdentificationEntityType.TRANSPORT_DOCUMENT
                        Case "RA"
                            Detallista.requestForPaymentIdentification.entityType = WSPremium.Detallista.detallistaRequestForPaymentIdentificationEntityType.LEASE_RECEIPT
                    End Select
                    Detallista.totalAmount = New Detallista.detallistaTotalAmount()
                    Detallista.totalAmount.Amount = Comprobante.total

                ElseIf (Elementos.Length = 19 And Trim(Elementos(1)).ToUpper = "DETALLISTA" And _
                Trim(Elementos(2)).ToUpper = "SPECIALINS") Then
                    'Llenamos SpecialIns
                    If (Detallista.shipmentDetail Is Nothing) Then
                        Detallista.specialInstruction = New Detallista.detallistaSpecialInstruction() {New Detallista.detallistaSpecialInstruction()}
                        If (Elementos(3).Trim = "") Then
                            ValidaCFDi.AgregaRespuesta("11", 4, "Debe indicar el dato code (3) en la seccion SPECIALINS del complemento detallista", Resp)
                        Else
                            Select Case Elementos(3).Trim.ToUpper()
                                Case "AAB"
                                    Detallista.specialInstruction(0).code = WSPremium.Detallista.detallistaSpecialInstructionCode.AAB
                                Case "DUT"
                                    Detallista.specialInstruction(0).code = WSPremium.Detallista.detallistaSpecialInstructionCode.DUT
                                Case "PUR"
                                    Detallista.specialInstruction(0).code = WSPremium.Detallista.detallistaSpecialInstructionCode.PUR
                                Case "ZZZ"
                                    Detallista.specialInstruction(0).code = WSPremium.Detallista.detallistaSpecialInstructionCode.ZZZ
                                Case Else
                                    ValidaCFDi.AgregaRespuesta("11", 4, "Debe indicar un valor correcto en el campo code de la seccion SPECIALINS", Resp)
                            End Select
                        End If
                        Detallista.specialInstruction(0).Text = New String() {}
                        If (Elementos(4).Trim = "") Then
                            ValidaCFDi.AgregaRespuesta("11", 5, "Debe indicar el dato Text (4) de la seccion SPECIALINS del complemento detallista.", Resp)
                        Else
                            If (Elementos(4).Trim.Length > 255) Then
                                ValidaCFDi.AgregaRespuesta("11", 5, "El dato Text (4) de la seccion SPECIALINS del complemento detallista no puede ser de longitud mayor a 255 caracteres.", Resp)
                            End If
                            ReDim Preserve Detallista.specialInstruction(0).Text(1)
                            Detallista.specialInstruction(0).Text(0) = Elementos(4).Trim
                        End If
                        If (Elementos(5).Trim <> "") Then
                            If (Elementos(5).Trim.Length > 255) Then
                                ValidaCFDi.AgregaRespuesta("11", 6, "El dato Text (5) de la seccion SPECIALINS del complemento detallista no puede ser de longitud mayor a 255 caracteres.", Resp)
                            End If
                            ReDim Preserve Detallista.specialInstruction(0).Text(2)
                            Detallista.specialInstruction(0).Text(1) = Elementos(5).Trim
                        End If
                        If (Elementos(6).Trim <> "") Then
                            If (Elementos(6).Trim.Length > 255) Then
                                ValidaCFDi.AgregaRespuesta("11", 7, "El dato Text (6) de la seccion SPECIALINS del complemento detallista no puede ser de longitud mayor a 255 caracteres.", Resp)
                            End If
                            ReDim Preserve Detallista.specialInstruction(0).Text(3)
                            Detallista.specialInstruction(0).Text(2) = Elementos(6).Trim
                        End If
                        If (Elementos(7).Trim <> "") Then
                            If (Elementos(7).Trim.Length > 255) Then
                                ValidaCFDi.AgregaRespuesta("11", 8, "El dato Text (7) de la seccion SPECIALINS del complemento detallista no puede ser de longitud mayor a 255 caracteres.", Resp)
                            End If
                            ReDim Preserve Detallista.specialInstruction(0).Text(4)
                            Detallista.specialInstruction(0).Text(3) = Elementos(7).Trim
                        End If
                        If (Elementos(8).Trim <> "") Then
                            If (Elementos(8).Trim.Length > 255) Then
                                ValidaCFDi.AgregaRespuesta("11", 9, "El dato Text (8) de la seccion SPECIALINS del complemento detallista no puede ser de longitud mayor a 255 caracteres.", Resp)
                            End If
                            ReDim Preserve Detallista.specialInstruction(0).Text(5)
                            Detallista.specialInstruction(0).Text(4) = Elementos(8).Trim
                        End If
                        If (Elementos(9).Trim <> "") Then
                            If (Elementos(9).Trim.Length > 255) Then
                                ValidaCFDi.AgregaRespuesta("11", 10, "El dato Text (9) de la seccion SPECIALINS del complemento detallista no puede ser de longitud mayor a 255 caracteres.", Resp)
                            End If
                            ReDim Preserve Detallista.specialInstruction(0).Text(6)
                            Detallista.specialInstruction(0).Text(5) = Elementos(9).Trim
                        End If
                        If (Elementos(10).Trim <> "") Then
                            If (Elementos(10).Trim.Length > 255) Then
                                ValidaCFDi.AgregaRespuesta("11", 11, "El dato Text (10) de la seccion SPECIALINS del complemento detallista no puede ser de longitud mayor a 255 caracteres.", Resp)
                            End If
                            ReDim Preserve Detallista.specialInstruction(0).Text(7)
                            Detallista.specialInstruction(0).Text(6) = Elementos(10).Trim
                        End If
                        If (Elementos(11).Trim <> "") Then
                            If (Elementos(11).Trim.Length > 255) Then
                                ValidaCFDi.AgregaRespuesta("11", 12, "El dato Text (11) de la seccion SPECIALINS del complemento detallista no puede ser de longitud mayor a 255 caracteres.", Resp)
                            End If
                            ReDim Preserve Detallista.specialInstruction(0).Text(8)
                            Detallista.specialInstruction(0).Text(7) = Elementos(11).Trim
                        End If
                        If (Elementos(12).Trim <> "") Then
                            If (Elementos(12).Trim.Length > 255) Then
                                ValidaCFDi.AgregaRespuesta("11", 13, "El dato Text (12) de la seccion SPECIALINS del complemento detallista no puede ser de longitud mayor a 255 caracteres.", Resp)
                            End If
                            ReDim Preserve Detallista.specialInstruction(0).Text(9)
                            Detallista.specialInstruction(0).Text(8) = Elementos(12).Trim
                        End If
                        If (Elementos(13).Trim <> "") Then
                            If (Elementos(13).Trim.Length > 255) Then
                                ValidaCFDi.AgregaRespuesta("11", 14, "El dato Text (13) de la seccion SPECIALINS del complemento detallista no puede ser de longitud mayor a 255 caracteres.", Resp)
                            End If
                            ReDim Preserve Detallista.specialInstruction(0).Text(10)
                            Detallista.specialInstruction(0).Text(9) = Elementos(13).Trim
                        End If
                        If (Elementos(14).Trim <> "") Then
                            If (Elementos(14).Trim.Length > 255) Then
                                ValidaCFDi.AgregaRespuesta("11", 15, "El dato Text (14) de la seccion SPECIALINS del complemento detallista no puede ser de longitud mayor a 255 caracteres.", Resp)
                            End If
                            ReDim Preserve Detallista.specialInstruction(0).Text(11)
                            Detallista.specialInstruction(0).Text(10) = Elementos(14).Trim
                        End If
                        If (Elementos(15).Trim <> "") Then
                            If (Elementos(15).Trim.Length > 255) Then
                                ValidaCFDi.AgregaRespuesta("11", 16, "El dato Text (15) de la seccion SPECIALINS del complemento detallista no puede ser de longitud mayor a 255 caracteres.", Resp)
                            End If
                            ReDim Preserve Detallista.specialInstruction(0).Text(12)
                            Detallista.specialInstruction(0).Text(11) = Elementos(15).Trim
                        End If
                        If (Elementos(16).Trim <> "") Then
                            If (Elementos(16).Trim.Length > 255) Then
                                ValidaCFDi.AgregaRespuesta("11", 17, "El dato Text (16) de la seccion SPECIALINS del complemento detallista no puede ser de longitud mayor a 255 caracteres.", Resp)
                            End If
                            ReDim Preserve Detallista.specialInstruction(0).Text(13)
                            Detallista.specialInstruction(0).Text(12) = Elementos(16).Trim
                        End If
                        If (Elementos(17).Trim <> "") Then
                            If (Elementos(17).Trim.Length > 255) Then
                                ValidaCFDi.AgregaRespuesta("11", 18, "El dato Text (17) de la seccion SPECIALINS del complemento detallista no puede ser de longitud mayor a 255 caracteres.", Resp)
                            End If
                            ReDim Preserve Detallista.specialInstruction(0).Text(14)
                            Detallista.specialInstruction(0).Text(13) = Elementos(17).Trim
                        End If
                        If (Elementos(18).Trim <> "") Then
                            If (Elementos(18).Trim.Length > 255) Then
                                ValidaCFDi.AgregaRespuesta("11", 19, "El dato Text (18) de la seccion SPECIALINS del complemento detallista no puede ser de longitud mayor a 255 caracteres.", Resp)
                            End If
                            ReDim Preserve Detallista.specialInstruction(0).Text(15)
                            Detallista.specialInstruction(0).Text(14) = Elementos(18).Trim
                        End If
                    Else
                        ReDim Preserve Detallista.specialInstruction(Detallista.specialInstruction.Length)
                        Detallista.specialInstruction(Detallista.specialInstruction.Length - 1) = New Detallista.detallistaSpecialInstruction()
                        If (Elementos(3).Trim = "") Then
                            ValidaCFDi.AgregaRespuesta("11", 4, "Debe indicar el dato code (3) en la seccion SPECIALINS del complemento detallista", Resp)
                        Else
                            Select Case Elementos(3).Trim.ToUpper()
                                Case "AAB"
                                    Detallista.specialInstruction(Detallista.specialInstruction.Length - 1).code = WSPremium.Detallista.detallistaSpecialInstructionCode.AAB
                                Case "DUT"
                                    Detallista.specialInstruction(Detallista.specialInstruction.Length - 1).code = WSPremium.Detallista.detallistaSpecialInstructionCode.DUT
                                Case "PUR"
                                    Detallista.specialInstruction(Detallista.specialInstruction.Length - 1).code = WSPremium.Detallista.detallistaSpecialInstructionCode.PUR
                                Case "ZZZ"
                                    Detallista.specialInstruction(Detallista.specialInstruction.Length - 1).code = WSPremium.Detallista.detallistaSpecialInstructionCode.ZZZ
                                Case Else
                                    ValidaCFDi.AgregaRespuesta("11", 4, "Debe indicar un valor correcto en el campo code de la seccion SPECIALINS", Resp)
                            End Select
                        End If
                        Detallista.specialInstruction(Detallista.specialInstruction.Length).Text = New String() {}
                        If (Elementos(4).Trim = "") Then
                            ValidaCFDi.AgregaRespuesta("11", 5, "Debe indicar el dato Text (4) de la seccion SPECIALINS del complemento detallista.", Resp)
                        Else
                            If (Elementos(4).Trim.Length > 255) Then
                                ValidaCFDi.AgregaRespuesta("11", 5, "El dato Text (4) de la seccion SPECIALINS del complemento detallista no puede ser de longitud mayor a 255 caracteres.", Resp)
                            End If
                            ReDim Preserve Detallista.specialInstruction(Detallista.specialInstruction.Length).Text(1)
                            Detallista.specialInstruction(Detallista.specialInstruction.Length - 1).Text(0) = Elementos(4).Trim
                        End If
                        If (Elementos(5).Trim <> "") Then
                            If (Elementos(5).Trim.Length > 255) Then
                                ValidaCFDi.AgregaRespuesta("11", 6, "El dato Text (5) de la seccion SPECIALINS del complemento detallista no puede ser de longitud mayor a 255 caracteres.", Resp)
                            End If
                            ReDim Preserve Detallista.specialInstruction(Detallista.specialInstruction.Length).Text(2)
                            Detallista.specialInstruction(Detallista.specialInstruction.Length - 1).Text(1) = Elementos(5).Trim
                        End If
                        If (Elementos(6).Trim <> "") Then
                            If (Elementos(6).Trim.Length > 255) Then
                                ValidaCFDi.AgregaRespuesta("11", 7, "El dato Text (6) de la seccion SPECIALINS del complemento detallista no puede ser de longitud mayor a 255 caracteres.", Resp)
                            End If
                            ReDim Preserve Detallista.specialInstruction(Detallista.specialInstruction.Length).Text(3)
                            Detallista.specialInstruction(Detallista.specialInstruction.Length - 1).Text(2) = Elementos(6).Trim
                        End If
                        If (Elementos(7).Trim <> "") Then
                            If (Elementos(7).Trim.Length > 255) Then
                                ValidaCFDi.AgregaRespuesta("11", 8, "El dato Text (7) de la seccion SPECIALINS del complemento detallista no puede ser de longitud mayor a 255 caracteres.", Resp)
                            End If
                            ReDim Preserve Detallista.specialInstruction(Detallista.specialInstruction.Length).Text(4)
                            Detallista.specialInstruction(Detallista.specialInstruction.Length - 1).Text(3) = Elementos(7).Trim
                        End If
                        If (Elementos(8).Trim <> "") Then
                            If (Elementos(8).Trim.Length > 255) Then
                                ValidaCFDi.AgregaRespuesta("11", 9, "El dato Text (8) de la seccion SPECIALINS del complemento detallista no puede ser de longitud mayor a 255 caracteres.", Resp)
                            End If
                            ReDim Preserve Detallista.specialInstruction(Detallista.specialInstruction.Length).Text(5)
                            Detallista.specialInstruction(Detallista.specialInstruction.Length - 1).Text(4) = Elementos(8).Trim
                        End If
                        If (Elementos(9).Trim <> "") Then
                            If (Elementos(9).Trim.Length > 255) Then
                                ValidaCFDi.AgregaRespuesta("11", 10, "El dato Text (9) de la seccion SPECIALINS del complemento detallista no puede ser de longitud mayor a 255 caracteres.", Resp)
                            End If
                            ReDim Preserve Detallista.specialInstruction(Detallista.specialInstruction.Length).Text(6)
                            Detallista.specialInstruction(Detallista.specialInstruction.Length - 1).Text(5) = Elementos(9).Trim
                        End If
                        If (Elementos(10).Trim <> "") Then
                            If (Elementos(10).Trim.Length > 255) Then
                                ValidaCFDi.AgregaRespuesta("11", 11, "El dato Text (10) de la seccion SPECIALINS del complemento detallista no puede ser de longitud mayor a 255 caracteres.", Resp)
                            End If
                            ReDim Preserve Detallista.specialInstruction(Detallista.specialInstruction.Length).Text(7)
                            Detallista.specialInstruction(Detallista.specialInstruction.Length - 1).Text(6) = Elementos(10).Trim
                        End If
                        If (Elementos(11).Trim <> "") Then
                            If (Elementos(11).Trim.Length > 255) Then
                                ValidaCFDi.AgregaRespuesta("11", 12, "El dato Text (11) de la seccion SPECIALINS del complemento detallista no puede ser de longitud mayor a 255 caracteres.", Resp)
                            End If
                            ReDim Preserve Detallista.specialInstruction(Detallista.specialInstruction.Length).Text(8)
                            Detallista.specialInstruction(Detallista.specialInstruction.Length - 1).Text(7) = Elementos(11).Trim
                        End If
                        If (Elementos(12).Trim <> "") Then
                            If (Elementos(12).Trim.Length > 255) Then
                                ValidaCFDi.AgregaRespuesta("11", 13, "El dato Text (12) de la seccion SPECIALINS del complemento detallista no puede ser de longitud mayor a 255 caracteres.", Resp)
                            End If
                            ReDim Preserve Detallista.specialInstruction(Detallista.specialInstruction.Length).Text(9)
                            Detallista.specialInstruction(Detallista.specialInstruction.Length - 1).Text(8) = Elementos(12).Trim
                        End If
                        If (Elementos(13).Trim <> "") Then
                            If (Elementos(13).Trim.Length > 255) Then
                                ValidaCFDi.AgregaRespuesta("11", 14, "El dato Text (13) de la seccion SPECIALINS del complemento detallista no puede ser de longitud mayor a 255 caracteres.", Resp)
                            End If
                            ReDim Preserve Detallista.specialInstruction(Detallista.specialInstruction.Length).Text(10)
                            Detallista.specialInstruction(Detallista.specialInstruction.Length - 1).Text(9) = Elementos(13).Trim
                        End If
                        If (Elementos(14).Trim <> "") Then
                            If (Elementos(14).Trim.Length > 255) Then
                                ValidaCFDi.AgregaRespuesta("11", 15, "El dato Text (14) de la seccion SPECIALINS del complemento detallista no puede ser de longitud mayor a 255 caracteres.", Resp)
                            End If
                            ReDim Preserve Detallista.specialInstruction(Detallista.specialInstruction.Length).Text(11)
                            Detallista.specialInstruction(Detallista.specialInstruction.Length - 1).Text(10) = Elementos(14).Trim
                        End If
                        If (Elementos(15).Trim <> "") Then
                            If (Elementos(15).Trim.Length > 255) Then
                                ValidaCFDi.AgregaRespuesta("11", 16, "El dato Text (15) de la seccion SPECIALINS del complemento detallista no puede ser de longitud mayor a 255 caracteres.", Resp)
                            End If
                            ReDim Preserve Detallista.specialInstruction(Detallista.specialInstruction.Length).Text(12)
                            Detallista.specialInstruction(Detallista.specialInstruction.Length - 1).Text(11) = Elementos(15).Trim
                        End If
                        If (Elementos(16).Trim <> "") Then
                            If (Elementos(16).Trim.Length > 255) Then
                                ValidaCFDi.AgregaRespuesta("11", 17, "El dato Text (16) de la seccion SPECIALINS del complemento detallista no puede ser de longitud mayor a 255 caracteres.", Resp)
                            End If
                            ReDim Preserve Detallista.specialInstruction(Detallista.specialInstruction.Length).Text(13)
                            Detallista.specialInstruction(Detallista.specialInstruction.Length - 1).Text(12) = Elementos(16).Trim
                        End If
                        If (Elementos(17).Trim <> "") Then
                            If (Elementos(17).Trim.Length > 255) Then
                                ValidaCFDi.AgregaRespuesta("11", 18, "El dato Text (17) de la seccion SPECIALINS del complemento detallista no puede ser de longitud mayor a 255 caracteres.", Resp)
                            End If
                            ReDim Preserve Detallista.specialInstruction(Detallista.specialInstruction.Length).Text(14)
                            Detallista.specialInstruction(Detallista.specialInstruction.Length - 1).Text(13) = Elementos(17).Trim
                        End If
                        If (Elementos(18).Trim <> "") Then
                            If (Elementos(18).Trim.Length > 255) Then
                                ValidaCFDi.AgregaRespuesta("11", 19, "El dato Text (18) de la seccion SPECIALINS del complemento detallista no puede ser de longitud mayor a 255 caracteres.", Resp)
                            End If
                            ReDim Preserve Detallista.specialInstruction(Detallista.specialInstruction.Length).Text(15)
                            Detallista.specialInstruction(Detallista.specialInstruction.Length - 1).Text(14) = Elementos(18).Trim
                        End If
                    End If


                ElseIf (Elementos.Length = 6 And Trim(Elementos(1)).ToUpper = "DETALLISTA" And _
                Trim(Elementos(2)).ToUpper = "ORDERID" And Trim(Elementos(3)).ToUpper = "ORDER") Then
                    'Order Id
                    Detallista.orderIdentification = New Detallista.detallistaOrderIdentification()
                    If (Detallista.orderIdentification.referenceIdentification Is Nothing) Then
                        Detallista.orderIdentification.referenceIdentification = New Detallista.detallistaOrderIdentificationReferenceIdentification() {New Detallista.detallistaOrderIdentificationReferenceIdentification()}
                        Detallista.orderIdentification.referenceIdentification(0) = New Detallista.detallistaOrderIdentificationReferenceIdentification()
                        If (Elementos(4).Trim <> "") Then
                            Detallista.orderIdentification.referenceIdentification(0).type = WSPremium.Detallista.detallistaOrderIdentificationReferenceIdentificationType.ON
                        Else
                            ValidaCFDi.AgregaRespuesta("11", 5, "Debe indicar el dato type (4) de la seccion ORDERID ORDER del complemento detallista.", Resp)
                        End If
                        If (Elementos(5).Trim = "") Then
                            ValidaCFDi.AgregaRespuesta("11", 6, "Debe indicar el dato value(5) de la seccion ORDERID ORDER del complemento detallista.", Resp)
                        Else
                            Detallista.orderIdentification.referenceIdentification(0).Value = Elementos(5).Trim
                        End If
                    Else
                        ReDim Preserve Detallista.orderIdentification.referenceIdentification(Detallista.orderIdentification.referenceIdentification.Length)
                        Detallista.orderIdentification.referenceIdentification(Detallista.orderIdentification.referenceIdentification.Length - 1) = New Detallista.detallistaOrderIdentificationReferenceIdentification()
                        If (Elementos(4).Trim <> "") Then
                            Detallista.orderIdentification.referenceIdentification(Detallista.orderIdentification.referenceIdentification.Length - 1).type = WSPremium.Detallista.detallistaOrderIdentificationReferenceIdentificationType.ON
                        Else
                            ValidaCFDi.AgregaRespuesta("11", 5, "Debe indicar el dato type (4) de la seccion ORDERID ORDER del complemento detallista.", Resp)
                        End If
                        If (Elementos(5).Trim = "") Then
                            ValidaCFDi.AgregaRespuesta("11", 6, "Debe indicar el dato value(5) de la seccion ORDERID ORDER del complemento detallista.", Resp)
                        Else
                            Detallista.orderIdentification.referenceIdentification(Detallista.orderIdentification.referenceIdentification.Length - 1).Value = Elementos(5).Trim
                        End If
                    End If

                ElseIf (Elementos.Length = 5 And Trim(Elementos(1)).ToUpper = "DETALLISTA" And _
                    Trim(Elementos(2)).ToUpper = "ORDERID" And Trim(Elementos(3)).ToUpper = "DATE") Then
                    'Order Date
                    If (Detallista.orderIdentification IsNot Nothing) Then
                        If (Elementos(4).Trim <> "") Then
                            Detallista.orderIdentification.ReferenceDate = CDate(Elementos(4).Trim)
                            Detallista.orderIdentification.ReferenceDateSpecified = True
                        End If
                    End If

                ElseIf (Elementos.Length = 5 And Trim(Elementos(1)).ToUpper = "DETALLISTA" And _
                Trim(Elementos(2)).ToUpper = "ADDITIONALINF") Then
                    If (Detallista.AdditionalInformation Is Nothing) Then
                        Detallista.AdditionalInformation = New Detallista.detallistaReferenceIdentification() {New Detallista.detallistaReferenceIdentification()}
                        Detallista.AdditionalInformation(0) = New Detallista.detallistaReferenceIdentification()
                        If (Elementos(3).Trim = "") Then
                            ValidaCFDi.AgregaRespuesta("11", 4, "Debe indicar el dato type (3) de la seccion ADDITIONALINF del complemento detallista.", Resp)
                        Else
                            Select Case Elementos(3).Trim.ToUpper
                                Case "AAE"
                                    Detallista.AdditionalInformation(0).type = WSPremium.Detallista.detallistaReferenceIdentificationType.AAE
                                Case "CK"
                                    Detallista.AdditionalInformation(0).type = WSPremium.Detallista.detallistaReferenceIdentificationType.CK
                                Case "ACE"
                                    Detallista.AdditionalInformation(0).type = WSPremium.Detallista.detallistaReferenceIdentificationType.ACE
                                Case "ATZ"
                                    Detallista.AdditionalInformation(0).type = WSPremium.Detallista.detallistaReferenceIdentificationType.ATZ
                                Case "DQ"
                                    Detallista.AdditionalInformation(0).type = WSPremium.Detallista.detallistaReferenceIdentificationType.DQ
                                Case "IV"
                                    Detallista.AdditionalInformation(0).type = WSPremium.Detallista.detallistaReferenceIdentificationType.IV
                                Case "ON"
                                    Detallista.AdditionalInformation(0).type = WSPremium.Detallista.detallistaReferenceIdentificationType.ON
                                Case "AWR"
                                    Detallista.AdditionalInformation(0).type = WSPremium.Detallista.detallistaReferenceIdentificationType.AWR
                                Case Else
                                    ValidaCFDi.AgregaRespuesta("11", 4, "Debe indicar un valor correcto en el campo type de la seccion ADDITIONALINF.", Resp)
                            End Select
                        End If
                        If (Elementos(4).Trim = "") Then
                            ValidaCFDi.AgregaRespuesta("11", 5, "Debe indicar el dato value (4) de la seccion ADDITIONALINF del complemento detallista.", Resp)
                        Else
                            Detallista.AdditionalInformation(0).Value = Elementos(4).Trim
                        End If
                    Else
                        ReDim Preserve Detallista.AdditionalInformation(Detallista.AdditionalInformation.Length)
                        Detallista.AdditionalInformation(Detallista.AdditionalInformation.Length - 1) = New Detallista.detallistaReferenceIdentification()
                        If (Elementos(3).Trim = "") Then
                            ValidaCFDi.AgregaRespuesta("11", 4, "Debe indicar el dato type (3) de la seccion ADDITIONALINF del complemento detallista.", Resp)
                        Else
                            Select Case Elementos(3).Trim.ToUpper
                                Case "AAE"
                                    Detallista.AdditionalInformation(Detallista.AdditionalInformation.Length - 1).type = WSPremium.Detallista.detallistaReferenceIdentificationType.AAE
                                Case "CK"
                                    Detallista.AdditionalInformation(Detallista.AdditionalInformation.Length - 1).type = WSPremium.Detallista.detallistaReferenceIdentificationType.CK
                                Case "ACE"
                                    Detallista.AdditionalInformation(Detallista.AdditionalInformation.Length - 1).type = WSPremium.Detallista.detallistaReferenceIdentificationType.ACE
                                Case "ATZ"
                                    Detallista.AdditionalInformation(Detallista.AdditionalInformation.Length - 1).type = WSPremium.Detallista.detallistaReferenceIdentificationType.ATZ
                                Case "DQ"
                                    Detallista.AdditionalInformation(Detallista.AdditionalInformation.Length - 1).type = WSPremium.Detallista.detallistaReferenceIdentificationType.DQ
                                Case "IV"
                                    Detallista.AdditionalInformation(Detallista.AdditionalInformation.Length - 1).type = WSPremium.Detallista.detallistaReferenceIdentificationType.IV
                                Case "ON"
                                    Detallista.AdditionalInformation(Detallista.AdditionalInformation.Length - 1).type = WSPremium.Detallista.detallistaReferenceIdentificationType.ON
                                Case "AWR"
                                    Detallista.AdditionalInformation(Detallista.AdditionalInformation.Length - 1).type = WSPremium.Detallista.detallistaReferenceIdentificationType.AWR
                                Case Else
                                    ValidaCFDi.AgregaRespuesta("11", 4, "Debe indicar un valor correcto en el campo type de la seccion ADDITIONALINF.", Resp)
                            End Select
                        End If
                        If (Elementos(4).Trim = "") Then
                            ValidaCFDi.AgregaRespuesta("11", 5, "Debe indicar el dato value (4) de la seccion ADDITIONALINF del complemento detallista.", Resp)
                        Else
                            Detallista.AdditionalInformation(Detallista.AdditionalInformation.Length - 1).Value = Elementos(4).Trim
                        End If
                    End If

                ElseIf (Elementos.Length = 5 And Trim(Elementos(1)).ToUpper = "DETALLISTA" And _
                Trim(Elementos(2)).ToUpper = "DELIVERYNOTE" And Trim(Elementos(3)).ToUpper = "NOTE") Then
                    Detallista.DeliveryNote = New Detallista.detallistaDeliveryNote()
                    If (Detallista.DeliveryNote.referenceIdentification Is Nothing) Then
                        Detallista.DeliveryNote.referenceIdentification() = New String() {1}
                        If (Elementos(4).Trim = "") Then
                            ValidaCFDi.AgregaRespuesta("11", 5, "Debe indicar el dato referenceIdentication (4) en la seccion DELIVERYNOTE NOTE del complemento detallista.", Resp)
                        Else
                            If (Elementos(4).Trim.Length > 35) Then
                                ValidaCFDi.AgregaRespuesta("11", 5, "El dato referenceIdentification (4) de la seccion DELIVERYNOTE NOTE del complemento detallista no puede ser de longitud mayor a 35 caracteres.", Resp)
                            End If
                            Detallista.DeliveryNote.referenceIdentification(0) = Elementos(4).Trim
                        End If
                    Else
                        ReDim Preserve Detallista.DeliveryNote.referenceIdentification(Detallista.DeliveryNote.referenceIdentification.Length)
                        If (Elementos(4).Trim = "") Then
                            ValidaCFDi.AgregaRespuesta("11", 5, "Debe indicar el dato referenceIdentication (4) en la seccion DELIVERYNOTE NOTE del complemento detallista.", Resp)
                        Else
                            If (Elementos(4).Trim.Length > 35) Then
                                ValidaCFDi.AgregaRespuesta("11", 5, "El dato referenceIdentification (4) de la seccion DELIVERYNOTE NOTE del complemento detallista no puede ser de longitud mayor a 35 caracteres.", Resp)
                            End If
                            Detallista.DeliveryNote.referenceIdentification(Detallista.DeliveryNote.referenceIdentification.Length - 1) = Elementos(4)
                        End If
                    End If

                ElseIf (Elementos.Length = 5 And Trim(Elementos(1)).ToUpper = "DETALLISTA" And _
                Trim(Elementos(2)).ToUpper = "DELIVERYNOTE" And Trim(Elementos(3)).ToUpper = "DATE") Then
                    If (Detallista.DeliveryNote IsNot Nothing) Then
                        If (Elementos(4).Trim <> "") Then
                            Detallista.DeliveryNote.ReferenceDate = CDate(Elementos(4).Trim)
                            Detallista.DeliveryNote.ReferenceDateSpecified = True
                        End If
                    End If

                ElseIf (Elementos.Length = 5 And Trim(Elementos(1)).ToUpper = "DETALLISTA" And _
                Trim(Elementos(2)).ToUpper = "BUYER") Then
                    Detallista.buyer = New Detallista.detallistaBuyer()
                    If (Elementos(3).Trim = "") Then
                        ValidaCFDi.AgregaRespuesta("11", 4, "Debe indicar el Gln (3) de la seccion BUYER en el complemento detallista.", Resp)
                    Else
                        If (Elementos(3).Trim.Length <> 13) Then
                            ValidaCFDi.AgregaRespuesta("11", 4, "El dato Gln (3) de la seccion BUYER del complemento detallista debe ser de longitud de 13 caracteres.", Resp)
                        End If
                        Detallista.buyer.gln = Elementos(3).Trim
                    End If
                    If (Elementos(4).Trim <> "") Then
                        Detallista.buyer.contactInformation = New Detallista.detallistaBuyerContactInformation()
                        Detallista.buyer.contactInformation.personOrDepartmentName = New Detallista.detallistaBuyerContactInformationPersonOrDepartmentName()
                        If (Elementos(4).Trim.Length > 35) Then
                            ValidaCFDi.AgregaRespuesta("11", 5, "El dato ContactInformation - PersonOrDepartmentName - text (4) de la seccion BUYER del complemento detallista no debe ser de longitud mayor a 35 caracteres.", Resp)
                        End If
                        Detallista.buyer.contactInformation.personOrDepartmentName.text = Elementos(4).Trim
                    End If

                ElseIf (Elementos.Length = 6 And Trim(Elementos(1)).ToUpper = "DETALLISTA" And _
                Trim(Elementos(2)).ToUpper = "SELLER") Then
                    Detallista.seller = New Detallista.detallistaSeller()
                    If (Elementos(3).Trim = "") Then
                        ValidaCFDi.AgregaRespuesta("11", 4, "Debe indicar el Gln (3) de la seccion SELLER del complemento detallista.", Resp)
                    Else
                        If (Elementos(3).Trim.Length <> 13) Then
                            ValidaCFDi.AgregaRespuesta("11", 4, "El dato Gln (3) de la seccion SELLER del complemento detallista debe ser de longitud de 13 caracteres.", Resp)
                        End If
                        Detallista.seller.gln = Elementos(3).Trim
                    End If
                    Detallista.seller.alternatePartyIdentification = New Detallista.detallistaSellerAlternatePartyIdentification()
                    If (Elementos(4).Trim = "") Then
                        ValidaCFDi.AgregaRespuesta("11", 5, "Debe indicar el dato type (4) de la seccion SELLER del complemento detallista.", Resp)
                    Else
                        Select Case Elementos(4).Trim.ToUpper()
                            Case "SELLER_ASSIGNED_IDENTIFIER_FOR_A_PARTY"
                                Detallista.seller.alternatePartyIdentification.type = WSPremium.Detallista.detallistaSellerAlternatePartyIdentificationType.SELLER_ASSIGNED_IDENTIFIER_FOR_A_PARTY
                            Case "IEPS_REFERENCE"
                                Detallista.seller.alternatePartyIdentification.type = WSPremium.Detallista.detallistaSellerAlternatePartyIdentificationType.IEPS_REFERENCE
                            Case Else
                                ValidaCFDi.AgregaRespuesta("11", 5, "Debe indicar un valor correcto en el campo type de la seccion SELLER.", Resp)
                        End Select
                    End If
                    If (Elementos(5).Trim = "") Then
                        ValidaCFDi.AgregaRespuesta("11", 6, "Debe indicar el dato value (5) de la seccion SELLER del complemento detallista.", Resp)
                    Else
                        Detallista.seller.alternatePartyIdentification.Value = Elementos(5).Trim
                    End If

                ElseIf (Elementos.Length = 8 And Trim(Elementos(1)).ToUpper = "DETALLISTA" And _
                Trim(Elementos(2)).ToUpper = "SHIPTO") Then
                    Detallista.shipTo = New Detallista.detallistaShipTo()
                    If (Elementos(3).Trim <> "") Then
                        If (Elementos(3).Trim.Length <> 13) Then
                            ValidaCFDi.AgregaRespuesta("11", 4, "El dato Gln (3) de la seccion SHIPTO del complemento detallista debe ser de longitud de 13 caracteres.", Resp)
                        End If
                        Detallista.shipTo.gln = Elementos(3).Trim
                    End If
                    If (Elementos(4).Trim <> "" Or Elementos(5).Trim <> "" Or Elementos(6).Trim <> "" Or Elementos(7).Trim <> "") Then
                        Detallista.shipTo.nameAndAddress = New Detallista.detallistaShipToNameAndAddress()
                        If (Elementos(4).Trim <> "") Then
                            If (Elementos(4).Trim.Length > 35) Then
                                ValidaCFDi.AgregaRespuesta("11", 5, "El dato name (4) de la seccion SHIPTO del complemento detallista debe ser de longitud menor a 35 caracteres.", Resp)
                            End If
                            Detallista.shipTo.nameAndAddress.name(0) = Elementos(4).Trim
                        End If
                        If (Elementos(5).Trim <> "") Then
                            If (Elementos(5).Trim.Length > 35) Then
                                ValidaCFDi.AgregaRespuesta("11", 6, "El dato streetAdderssOne (5) de la seccion SHIPTO del complemento detallista debe ser de longitud menor a 35 caracteres.", Resp)
                            End If
                            Detallista.shipTo.nameAndAddress.streetAddressOne(0) = Elementos(5).Trim
                        End If
                        If (Elementos(6).Trim <> "") Then
                            If (Elementos(6).Trim.Length > 35) Then
                                ValidaCFDi.AgregaRespuesta("11", 7, "El dato city (6) de la seccion SHIPTO del complemento detallista debe ser de longitud menor a 35 caracteres.", Resp)
                            End If
                            Detallista.shipTo.nameAndAddress.city(0) = Elementos(6).Trim
                        End If
                        If (Elementos(7).Trim <> "") Then
                            If (Elementos(7).Trim.Length > 9) Then
                                ValidaCFDi.AgregaRespuesta("11", 8, "El dato postalCode (7) de la seccion SHIPTO del complemento detallista debe ser de longitud menor a 9 caracteres.", Resp)
                            End If
                            Detallista.shipTo.nameAndAddress.postalCode(0) = Elementos(7).Trim
                        End If
                    End If

                ElseIf (Elementos.Length = 10 And Trim(Elementos(1)).ToUpper = "DETALLISTA" And _
                Trim(Elementos(2)).ToUpper = "INVOICECREATOR") Then
                    Detallista.InvoiceCreator = New Detallista.detallistaInvoiceCreator()
                    If (Elementos(3).Trim <> "") Then
                        If (Elementos(3).Trim.Length <> 13) Then
                            ValidaCFDi.AgregaRespuesta("11", 4, "El dato Gln (3) de la seccion INVOICECREATOR del complemento detallista debe ser de longitud de 13 caracteres.", Resp)
                        End If
                        Detallista.InvoiceCreator.gln = Elementos(3).Trim
                    End If
                    If (Elementos(4).Trim <> "" Or Elementos(5).Trim <> "") Then
                        Detallista.InvoiceCreator.alternatePartyIdentification = New Detallista.detallistaInvoiceCreatorAlternatePartyIdentification()
                        If (Elementos(4).Trim <> "") Then
                            Select Case Elementos(4).Trim.ToUpper
                                Case "VA"
                                    Detallista.InvoiceCreator.alternatePartyIdentification.type = WSPremium.Detallista.detallistaInvoiceCreatorAlternatePartyIdentificationType.VA
                                Case "IA"
                                    Detallista.InvoiceCreator.alternatePartyIdentification.type = WSPremium.Detallista.detallistaInvoiceCreatorAlternatePartyIdentificationType.IA
                                Case Else
                                    ValidaCFDi.AgregaRespuesta("11", 5, "El dato type de la seccion INVOICECREATOR debe tener un valor correcto.", Resp)
                            End Select
                        End If
                        If (Elementos(5).Trim <> "") Then
                            Detallista.InvoiceCreator.alternatePartyIdentification.Value = Elementos(5).Trim
                        End If
                    End If
                    If (Elementos(6).Trim <> "" Or Elementos(7).Trim <> "" Or Elementos(8).Trim Or Elementos(9).Trim) Then
                        Detallista.InvoiceCreator.nameAndAddress = New Detallista.detallistaInvoiceCreatorNameAndAddress()
                        If (Elementos(6).Trim <> "") Then
                            If (Elementos(6).Trim.Length > 35) Then
                                ValidaCFDi.AgregaRespuesta("11", 7, "El dato name (6) de la seccion INVOICECREATOR del complemento detallista debe ser de longitud menor a 35 caracteres.", Resp)
                            End If
                            Detallista.InvoiceCreator.nameAndAddress.name = Elementos(6).Trim
                        End If
                        If (Elementos(7).Trim <> "") Then
                            If (Elementos(7).Trim.Length > 35) Then
                                ValidaCFDi.AgregaRespuesta("11", 8, "El dato streetAddressOne (7) de la seccion INVOICECREATOR del complemento detallista debe ser de longitud menor a 35 caracteres.", Resp)
                            End If
                            Detallista.InvoiceCreator.nameAndAddress.streetAddressOne = Elementos(7).Trim
                        End If
                        If (Elementos(8).Trim <> "") Then
                            If (Elementos(8).Trim.Length > 35) Then
                                ValidaCFDi.AgregaRespuesta("11", 9, "El dato city (8) de la seccion INVOICECREATOR del complemento detallista debe ser de longitud menor a 35 caracteres.", Resp)
                            End If
                            Detallista.InvoiceCreator.nameAndAddress.city = Elementos(8).Trim
                        End If
                        If (Elementos(9).Trim <> "") Then
                            If (Elementos(9).Trim.Length > 9) Then
                                ValidaCFDi.AgregaRespuesta("11", 10, "El dato postalCode (9) de la seccion INVOICECREATOR del complemento detallista debe ser de longitud menor a 9 caracteres.", Resp)
                            End If
                            Detallista.InvoiceCreator.nameAndAddress.postalCode = Elementos(9).Trim
                        End If
                    End If

                ElseIf (Elementos.Length = 3 And Trim(Elementos(1)).ToUpper = "DETALLISTA" And _
                 Trim(Elementos(2)).ToUpper = "CUSTOMS") Then
                    If (Detallista.Customs Is Nothing) Then
                        If (Elementos(3).Trim <> "") Then
                            Detallista.Customs = New Detallista.detallistaCustoms() {New Detallista.detallistaCustoms()}
                            Detallista.Customs(0) = New Detallista.detallistaCustoms()
                            If (Elementos(3).Trim.Length <> 13) Then
                                ValidaCFDi.AgregaRespuesta("11", 4, "El dato Gln (3) de la seccion CUSTOMS del complemento detallista debe ser de longitud de 13 caracteres.", Resp)
                            End If
                            Detallista.Customs(0).gln = Elementos(3).Trim
                        End If
                    Else
                        If (Elementos(3).Trim <> "") Then
                            ReDim Preserve Detallista.Customs(Detallista.Customs.Length)
                            Detallista.Customs(Detallista.Customs.Length - 1) = New Detallista.detallistaCustoms()
                            If (Elementos(3).Trim.Length <> 13) Then
                                ValidaCFDi.AgregaRespuesta("11", 4, "El dato Gln (3) de la seccion CUSTOMS del complemento detallista debe ser de longitud de 13 caracteres.", Resp)
                            End If
                            Detallista.Customs(Detallista.Customs.Length - 1).gln = Elementos(3).Trim
                        End If
                    End If

                ElseIf (Elementos.Length = 3 And Trim(Elementos(1)).ToUpper = "DETALLISTA" And _
                Trim(Elementos(2)).ToUpper = "CURRENCY") Then
                    If (Detallista.currency Is Nothing) Then
                        Detallista.currency = New Detallista.detallistaCurrency() {New Detallista.detallistaCurrency()}
                        Detallista.currency(0) = New Detallista.detallistaCurrency()
                        Detallista.currency(0).currencyFunction = New Detallista.detallistaCurrencyCurrencyFunction() {New Detallista.detallistaCurrencyCurrencyFunction()}
                        If (Elementos(3).Trim = "") Then
                            ValidaCFDi.AgregaRespuesta("11", 4, "Debe indicar el dato currencyFunction (3) de la seccion CURRENCY del complemento detallista.", Resp)
                        Else
                            Select Case Elementos(3).Trim.ToUpper
                                Case "BILLING_CURRENCY"
                                    Detallista.currency(0).currencyFunction(0) = WSPremium.Detallista.detallistaCurrencyCurrencyFunction.BILLING_CURRENCY
                                Case "PRICE_CURRENCY"
                                    Detallista.currency(0).currencyFunction(0) = WSPremium.Detallista.detallistaCurrencyCurrencyFunction.PRICE_CURRENCY
                                Case "PAYMENT_CURRENCY"
                                    Detallista.currency(0).currencyFunction(0) = WSPremium.Detallista.detallistaCurrencyCurrencyFunction.PAYMENT_CURRENCY
                                Case Else
                                    ValidaCFDi.AgregaRespuesta("11", 4, "El valor currencyFunction debe tener un valor correcto en la seccion currency del complemento detallista.", Resp)
                            End Select
                        End If
                        Select Case Comprobante.Moneda.ToUpper()
                            Case "MXN"
                                Detallista.currency(0).currencyISOCode = WSPremium.Detallista.detallistaCurrencyCurrencyISOCode.MXN
                            Case "MXP"
                                Detallista.currency(0).currencyISOCode = WSPremium.Detallista.detallistaCurrencyCurrencyISOCode.MXN
                            Case "DLS"
                                Detallista.currency(0).currencyISOCode = WSPremium.Detallista.detallistaCurrencyCurrencyISOCode.USD
                            Case "USD"
                                Detallista.currency(0).currencyISOCode = WSPremium.Detallista.detallistaCurrencyCurrencyISOCode.USD
                            Case "EUR"
                                Detallista.currency(0).currencyISOCode = WSPremium.Detallista.detallistaCurrencyCurrencyISOCode.XEU
                            Case Else
                                ValidaCFDi.AgregaRespuesta("11", 0, "El valor currencyISOCode debe tener un valor correcto en la seccion currency del complemento detallista.", Resp)
                        End Select
                        If (Comprobante.TipoCambio <> "") Then
                            Detallista.currency(0).rateOfChange = Comprobante.TipoCambio
                            Detallista.currency(0).rateOfChangeSpecified = True
                        End If
                    Else
                        ReDim Preserve Detallista.currency(Detallista.currency.Length)
                        Detallista.currency(Detallista.currency.Length - 1) = New Detallista.detallistaCurrency()
                        Detallista.currency(Detallista.currency.Length - 1).currencyFunction = New Detallista.detallistaCurrencyCurrencyFunction() {New Detallista.detallistaCurrencyCurrencyFunction()}
                        If (Elementos(3).Trim = "") Then
                            ValidaCFDi.AgregaRespuesta("11", 4, "Debe indicar el dato currencyFunction (3) de la seccion CURRENCY del complemento detallista.", Resp)
                        Else
                            Select Case Elementos(3).Trim.ToUpper
                                Case "BILLING_CURRENCY"
                                    Detallista.currency(Detallista.currency.Length - 1).currencyFunction(0) = WSPremium.Detallista.detallistaCurrencyCurrencyFunction.BILLING_CURRENCY
                                Case "PRICE_CURRENCY"
                                    Detallista.currency(Detallista.currency.Length - 1).currencyFunction(0) = WSPremium.Detallista.detallistaCurrencyCurrencyFunction.PRICE_CURRENCY
                                Case "PAYMENT_CURRENCY"
                                    Detallista.currency(Detallista.currency.Length - 1).currencyFunction(0) = WSPremium.Detallista.detallistaCurrencyCurrencyFunction.PAYMENT_CURRENCY
                                Case Else
                                    ValidaCFDi.AgregaRespuesta("11", 4, "El valor currencyFunction debe tener un valor correcto en la seccion currency del complemento detallista.", Resp)
                            End Select
                        End If
                        Select Case Comprobante.Moneda.ToUpper()
                            Case "MXN"
                                Detallista.currency(Detallista.currency.Length - 1).currencyISOCode = WSPremium.Detallista.detallistaCurrencyCurrencyISOCode.MXN
                            Case "MXP"
                                Detallista.currency(Detallista.currency.Length - 1).currencyISOCode = WSPremium.Detallista.detallistaCurrencyCurrencyISOCode.MXN
                            Case "DLS"
                                Detallista.currency(Detallista.currency.Length - 1).currencyISOCode = WSPremium.Detallista.detallistaCurrencyCurrencyISOCode.USD
                            Case "USD"
                                Detallista.currency(Detallista.currency.Length - 1).currencyISOCode = WSPremium.Detallista.detallistaCurrencyCurrencyISOCode.USD
                            Case "EUR"
                                Detallista.currency(Detallista.currency.Length - 1).currencyISOCode = WSPremium.Detallista.detallistaCurrencyCurrencyISOCode.XEU
                            Case Else
                                ValidaCFDi.AgregaRespuesta("11", 0, "El valor currencyISOCode debe tener un valor correcto en la seccion currency del complemento detallista.", Resp)
                        End Select
                        If (Comprobante.TipoCambio <> "") Then
                            Detallista.currency(Detallista.currency.Length - 1).rateOfChange = Comprobante.TipoCambio
                            Detallista.currency(Detallista.currency.Length - 1).rateOfChangeSpecified = True
                        End If
                    End If

                ElseIf (Elementos.Length = 11 And Trim(Elementos(1)).ToUpper = "DETALLISTA" And _
                Trim(Elementos(2)).ToUpper = "PAYMENTTERMS") Then
                    Detallista.paymentTerms = New Detallista.detallistaPaymentTerms()
                    If (Elementos(3).Trim <> "") Then
                        Detallista.paymentTerms.paymentTermsEvent = WSPremium.Detallista.detallistaPaymentTermsPaymentTermsEvent.DATE_OF_INVOICE
                        Detallista.paymentTerms.paymentTermsEventSpecified = True
                    End If
                    If (Elementos(4).Trim <> "") Then
                        Detallista.paymentTerms.PaymentTermsRelationTime = WSPremium.Detallista.detallistaPaymentTermsPaymentTermsRelationTime.REFERENCE_AFTER
                        Detallista.paymentTerms.PaymentTermsRelationTimeSpecified = True
                    End If
                    Detallista.paymentTerms.netPayment = New Detallista.detallistaPaymentTermsNetPayment()
                    If (Elementos(6).Trim = "") Then
                        ValidaCFDi.AgregaRespuesta("11", 7, "Debe indicar el dato netPaymentTermsType (6) de la seccion PAYMENTTERMS del complemento detallista.", Resp)
                    Else
                        Detallista.paymentTerms.netPayment.netPaymentTermsType = New Detallista.detallistaPaymentTermsNetPaymentNetPaymentTermsType()
                        Select Case Elementos(6).Trim.ToUpper
                            Case "BASIC_NET"
                                Detallista.paymentTerms.netPayment.netPaymentTermsType = WSPremium.Detallista.detallistaPaymentTermsNetPaymentNetPaymentTermsType.BASIC_NET
                            Case "END_OF_MONTH"
                                Detallista.paymentTerms.netPayment.netPaymentTermsType = WSPremium.Detallista.detallistaPaymentTermsNetPaymentNetPaymentTermsType.END_OF_MONTH
                            Case "BASIC_DISCOUNT_OFFERED"
                                Detallista.paymentTerms.netPayment.netPaymentTermsType = WSPremium.Detallista.detallistaPaymentTermsNetPaymentNetPaymentTermsType.BASIC_DISCOUNT_OFFERED
                            Case Else
                                ValidaCFDi.AgregaRespuesta("11", 7, "El dato netPaymentTermsType de la seccion PAYMENTTERMS debe tener un valor correcto", Resp)
                        End Select
                    End If
                    Detallista.paymentTerms.netPayment.paymentTimePeriod = New Detallista.detallistaPaymentTermsNetPaymentPaymentTimePeriod()
                    Detallista.paymentTerms.netPayment.paymentTimePeriod.timePeriodDue = New Detallista.detallistaPaymentTermsNetPaymentPaymentTimePeriodTimePeriodDue()
                    Detallista.paymentTerms.netPayment.paymentTimePeriod.timePeriodDue.timePeriod = WSPremium.Detallista.detallistaPaymentTermsNetPaymentPaymentTimePeriodTimePeriodDueTimePeriod.DAYS
                    If (Elementos(8).Trim = "") Then
                        ValidaCFDi.AgregaRespuesta("11", 9, "Debe indicar el dato (8) value de la seccion PAYMENTTERMS del complemento detallista.", Resp)
                    Else
                        If (Elementos(8).Trim.Length > 5) Then
                            ValidaCFDi.AgregaRespuesta("11", 9, "El dato Value timePeriodDue(8) de la seccion PAYMENTTERMS del complemento detallista debe ser de longitud no mayor a 5 caracteres.", Resp)
                        End If
                        Detallista.paymentTerms.netPayment.paymentTimePeriod.timePeriodDue.value = Elementos(8).Trim
                    End If
                    If (Elementos(9).Trim <> "" Or Elementos(10).Trim <> "") Then
                        Detallista.paymentTerms.discountPayment = New Detallista.detallistaPaymentTermsDiscountPayment()
                        If (Elementos(9).Trim = "") Then
                            ValidaCFDi.AgregaRespuesta("11", 10, "Debe indicar el dato discountType de la seccion PAYMENTTERMS del complemento detallista.", Resp)
                        Else
                            Select Case Elementos(9).Trim.ToUpper
                                Case "ALLOWANCE_BY_PAYMENT_ON_TIME"
                                    Detallista.paymentTerms.discountPayment.discountType = WSPremium.Detallista.detallistaPaymentTermsDiscountPaymentDiscountType.ALLOWANCE_BY_PAYMENT_ON_TIME
                                Case "SANCTION"
                                    Detallista.paymentTerms.discountPayment.discountType = WSPremium.Detallista.detallistaPaymentTermsDiscountPaymentDiscountType.SANCTION
                                Case Else
                                    ValidaCFDi.AgregaRespuesta("11", 10, "Debe indicar un valor correcto en el dato discountType (9) del complemento detallista.", Resp)
                            End Select
                        End If
                        If (Elementos(10).Trim = "") Then
                            ValidaCFDi.AgregaRespuesta("11", 11, "Debe indicar el dato percentage (10) de la seccion PAYMENTTERMS del complemento detallista.", Resp)
                        Else
                            If (Elementos(10).Trim.Length > 5) Then
                                ValidaCFDi.AgregaRespuesta("11", 11, "El dato percentage(10) de la seccion PAYMENTTERMS del complemento detallista debe ser de longitud no mayor a 5 caracteres.", Resp)
                            End If
                            Detallista.paymentTerms.discountPayment.percentage = Elementos(10).Trim
                        End If
                    End If

                    'ElseIf (currentRow.Length = 4 And Trim(currentRow(1)).ToUpper = "DETALLISTA" And _
                    'Trim(currentRow(2)).ToUpper = "SHIPMENTDETAIL") Then
                    '    Detallista.shipmentDetail = currentRow(3)

                ElseIf (Elementos.Length = 9 And Trim(Elementos(1)).ToUpper = "DETALLISTA" And _
                Trim(Elementos(2)).ToUpper = "ALLOWANCECHARGE") Then
                    If (Detallista.allowanceCharge Is Nothing) Then
                        Detallista.allowanceCharge = New Detallista.detallistaAllowanceCharge() {New Detallista.detallistaAllowanceCharge()}
                        Detallista.allowanceCharge(0) = New Detallista.detallistaAllowanceCharge()
                        If (Elementos(3).Trim = "") Then
                            ValidaCFDi.AgregaRespuesta("11", 4, "Debe indicar el dato allowanceChargeType (3) de la seccion ALLOWANCECHARGE del complemento detallista.", Resp)
                        Else
                            Select Case Elementos(3).Trim.ToUpper
                                Case "ALLOWANCE_GLOBAL"
                                    Detallista.allowanceCharge(0).allowanceChargeType = WSPremium.Detallista.detallistaAllowanceChargeAllowanceChargeType.ALLOWANCE_GLOBAL
                                Case "CHARGE_GLOBAL"
                                    Detallista.allowanceCharge(0).allowanceChargeType = WSPremium.Detallista.detallistaAllowanceChargeAllowanceChargeType.CHARGE_GLOBAL
                                Case Else
                                    ValidaCFDi.AgregaRespuesta("11", 4, "Debe indicar un valor correcto en el dato allowanceChargeType (3) de la seccion ALLOWANCECHARGE del complemento detallista.", Resp)
                            End Select
                        End If
                        If (Elementos(4).Trim <> "") Then
                            Select Case Elementos(4).Trim.ToUpper
                                Case "BILL_BACK"
                                    Detallista.allowanceCharge(0).settlementType = WSPremium.Detallista.detallistaAllowanceChargeSettlementType.BILL_BACK
                                Case "OFF_INVOICE"
                                    Detallista.allowanceCharge(0).settlementType = WSPremium.Detallista.detallistaAllowanceChargeSettlementType.OFF_INVOICE
                                Case Else
                                    ValidaCFDi.AgregaRespuesta("11", 5, "Debe indicar un valor correcto en el dato sttlementType (4) de la seccion ALLOWANCECHARGE del complemento detallista.", Resp)
                            End Select
                        End If
                        If (Elementos(5).Trim <> "") Then
                            If (Elementos(5).Trim.Length > 15) Then
                                ValidaCFDi.AgregaRespuesta("11", 6, "El dato sequenceNumber(5) de la seccion ALLOWANCECHARGE del complemento detallista debe ser de longitud no mayor a 15 caracteres.", Resp)
                            End If
                            Detallista.allowanceCharge(0).sequenceNumber = Elementos(5).Trim
                        End If
                        If (Elementos(6).Trim <> "") Then
                            Select Case Elementos(6).Trim.ToUpper
                                Case "AA"
                                    Detallista.allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.AA
                                    Detallista.allowanceCharge(0).specialServicesTypeSpecified = True
                                Case "AJ"
                                    Detallista.allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.AJ
                                    Detallista.allowanceCharge(0).specialServicesTypeSpecified = True
                                Case "ADO"
                                    Detallista.allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.ADO
                                    Detallista.allowanceCharge(0).specialServicesTypeSpecified = True
                                Case "ADT"
                                    Detallista.allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.ADT
                                    Detallista.allowanceCharge(0).specialServicesTypeSpecified = True
                                Case "ADS"
                                    Detallista.allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.ADS
                                    Detallista.allowanceCharge(0).specialServicesTypeSpecified = True
                                Case "ABZ"
                                    Detallista.allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.ABZ
                                    Detallista.allowanceCharge(0).specialServicesTypeSpecified = True
                                Case "DA"
                                    Detallista.allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.DA
                                    Detallista.allowanceCharge(0).specialServicesTypeSpecified = True
                                Case "EAA"
                                    Detallista.allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.EAA
                                    Detallista.allowanceCharge(0).specialServicesTypeSpecified = True
                                Case "EAB"
                                    Detallista.allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.EAB
                                    Detallista.allowanceCharge(0).specialServicesTypeSpecified = True
                                Case "PI"
                                    Detallista.allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.PI
                                    Detallista.allowanceCharge(0).specialServicesTypeSpecified = True
                                Case "TAE"
                                    Detallista.allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.TAE
                                    Detallista.allowanceCharge(0).specialServicesTypeSpecified = True
                                Case "SAB"
                                    Detallista.allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.SAB
                                    Detallista.allowanceCharge(0).specialServicesTypeSpecified = True
                                Case "RAA"
                                    Detallista.allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.RAA
                                    Detallista.allowanceCharge(0).specialServicesTypeSpecified = True
                                Case "PAD"
                                    Detallista.allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.PAD
                                    Detallista.allowanceCharge(0).specialServicesTypeSpecified = True
                                Case "FG"
                                    Detallista.allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.FG
                                    Detallista.allowanceCharge(0).specialServicesTypeSpecified = True
                                Case "FA"
                                    Detallista.allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.FA
                                    Detallista.allowanceCharge(0).specialServicesTypeSpecified = True
                                Case "TD"
                                    Detallista.allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.TD
                                    Detallista.allowanceCharge(0).specialServicesTypeSpecified = True
                                Case "TS"
                                    Detallista.allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.TS
                                    Detallista.allowanceCharge(0).specialServicesTypeSpecified = True
                                Case "TX"
                                    Detallista.allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.TX
                                    Detallista.allowanceCharge(0).specialServicesTypeSpecified = True
                                Case "TZ"
                                    Detallista.allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.TZ
                                    Detallista.allowanceCharge(0).specialServicesTypeSpecified = True
                                Case "ZZZ"
                                    Detallista.allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.ZZZ
                                    Detallista.allowanceCharge(0).specialServicesTypeSpecified = True
                                Case "VAB"
                                    Detallista.allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.VAB
                                    Detallista.allowanceCharge(0).specialServicesTypeSpecified = True
                                Case "UM"
                                    Detallista.allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.UM
                                    Detallista.allowanceCharge(0).specialServicesTypeSpecified = True
                                Case "DI"
                                    Detallista.allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.DI
                                    Detallista.allowanceCharge(0).specialServicesTypeSpecified = True
                                Case "CAC"
                                    Detallista.allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.CAC
                                    Detallista.allowanceCharge(0).specialServicesTypeSpecified = True
                                Case "COD"
                                    Detallista.allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.COD
                                    Detallista.allowanceCharge(0).specialServicesTypeSpecified = True
                                Case "EAB"
                                    Detallista.allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.EAB
                                    Detallista.allowanceCharge(0).specialServicesTypeSpecified = True
                                Case "FC"
                                    Detallista.allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.FC
                                    Detallista.allowanceCharge(0).specialServicesTypeSpecified = True
                                Case "FI"
                                    Detallista.allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.FI
                                    Detallista.allowanceCharge(0).specialServicesTypeSpecified = True
                                Case "HD"
                                    Detallista.allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.HD
                                    Detallista.allowanceCharge(0).specialServicesTypeSpecified = True
                                Case "QD"
                                    Detallista.allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.QD
                                    Detallista.allowanceCharge(0).specialServicesTypeSpecified = True
                                Case Else
                                    ValidaCFDi.AgregaRespuesta("11", 7, "Indique un valor correcto en el campo specialServicesType (6) de la seccion ALLOWANCECHARGE del complemento detallista.", Resp)
                            End Select
                        End If

                        Detallista.allowanceCharge(0).monetaryAmountOrPercentage = New Detallista.detallistaAllowanceChargeMonetaryAmountOrPercentage()
                        Detallista.allowanceCharge(0).monetaryAmountOrPercentage.rate = New Detallista.detallistaAllowanceChargeMonetaryAmountOrPercentageRate()
                        If (Elementos(7).Trim = "") Then
                            ValidaCFDi.AgregaRespuesta("11", 8, "Debe indicar el valor del campo base(7) de la seccion ALLOWANCECHARGE del complemento detallista.", Resp)
                        Else
                            Detallista.allowanceCharge(0).monetaryAmountOrPercentage.rate.base = WSPremium.Detallista.detallistaAllowanceChargeMonetaryAmountOrPercentageRateBase.INVOICE_VALUE
                        End If
                        If (Elementos(8).Trim <> "") Then
                            Try
                                Detallista.allowanceCharge(0).monetaryAmountOrPercentage.rate.percentage = Elementos(8).Trim
                            Catch ex As Exception
                                ValidaCFDi.AgregaRespuesta("11", 9, "No se pudo realizar la conversion a decimal del dato percentage de la seccion ALLOWANCECHARGE del complemento detallista", Resp)
                            End Try
                        End If
                    Else
                        ReDim Preserve Detallista.allowanceCharge(Detallista.allowanceCharge.Length)
                        Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1) = New Detallista.detallistaAllowanceCharge()
                        If (Elementos(3).Trim = "") Then
                            ValidaCFDi.AgregaRespuesta("11", 4, "Debe indicar el dato allowanceChargeType (3) de la seccion ALLOWANCECHARGE del complemento detallista.", Resp)
                        Else
                            Select Case Elementos(3).Trim.ToUpper
                                Case "ALLOWANCE_GLOBAL"
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).allowanceChargeType = WSPremium.Detallista.detallistaAllowanceChargeAllowanceChargeType.ALLOWANCE_GLOBAL
                                Case "CHARGE_GLOBAL"
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).allowanceChargeType = WSPremium.Detallista.detallistaAllowanceChargeAllowanceChargeType.CHARGE_GLOBAL
                                Case Else
                                    ValidaCFDi.AgregaRespuesta("11", 4, "Debe indicar un valor correcto en el dato allowanceChargeType (3) de la seccion ALLOWANCECHARGE del complemento detallista.", Resp)
                            End Select
                        End If
                        If (Elementos(4).Trim <> "") Then
                            Select Case Elementos(4).Trim.ToUpper
                                Case "BILL_BACK"
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).settlementType = WSPremium.Detallista.detallistaAllowanceChargeSettlementType.BILL_BACK
                                Case "OFF_INVOICE"
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).settlementType = WSPremium.Detallista.detallistaAllowanceChargeSettlementType.OFF_INVOICE
                                Case Else
                                    ValidaCFDi.AgregaRespuesta("11", 5, "Debe indicar un valor correcto en el dato sttlementType (4) de la seccion ALLOWANCECHARGE del complemento detallista.", Resp)
                            End Select
                        End If
                        If (Elementos(5).Trim <> "") Then
                            If (Elementos(5).Trim.Length > 15) Then
                                ValidaCFDi.AgregaRespuesta("11", 6, "El dato sequenceNumber(5) de la seccion ALLOWANCECHARGE del complemento detallista debe ser de longitud no mayor a 15 caracteres.", Resp)
                            End If
                            Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).sequenceNumber = Elementos(5).Trim
                        End If
                        If (Elementos(6).Trim <> "") Then
                            Select Case Elementos(6).Trim.ToUpper
                                Case "AA"
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.AA
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "AJ"
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.AJ
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "ADO"
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.ADO
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "ADT"
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.ADT
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "ADS"
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.ADS
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "ABZ"
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.ABZ
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "DA"
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.DA
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "EAA"
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.EAA
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "EAB"
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.EAB
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "PI"
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.PI
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "TAE"
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.TAE
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "SAB"
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.SAB
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "RAA"
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.RAA
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "PAD"
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.PAD
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "FG"
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.FG
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "FA"
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.FA
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "TD"
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.TD
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "TS"
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.TS
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "TX"
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.TX
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "TZ"
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.TZ
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "ZZZ"
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.ZZZ
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "VAB"
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.VAB
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "UM"
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.UM
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "DI"
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.DI
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "CAC"
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.CAC
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "COD"
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.COD
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "EAB"
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.EAB
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "FC"
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.FC
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "FI"
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.FI
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "HD"
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.HD
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "QD"
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaAllowanceChargeSpecialServicesType.QD
                                    Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case Else
                                    ValidaCFDi.AgregaRespuesta("11", 7, "Indique un valor correcto en el campo specialServicesType (6) de la seccion ALLOWANCECHARGE del complemento detallista.", Resp)
                            End Select
                        End If

                        Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).monetaryAmountOrPercentage = New Detallista.detallistaAllowanceChargeMonetaryAmountOrPercentage()
                        Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).monetaryAmountOrPercentage.rate = New Detallista.detallistaAllowanceChargeMonetaryAmountOrPercentageRate()
                        If (Elementos(7).Trim = "") Then
                            ValidaCFDi.AgregaRespuesta("11", 8, "Debe indicar el valor del campo base(7) de la seccion ALLOWANCECHARGE del complemento detallista.", Resp)
                        Else
                            Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).monetaryAmountOrPercentage.rate.base = WSPremium.Detallista.detallistaAllowanceChargeMonetaryAmountOrPercentageRateBase.INVOICE_VALUE
                        End If
                        If (Elementos(8).Trim <> "") Then
                            Try
                                Detallista.allowanceCharge(Detallista.allowanceCharge.Length - 1).monetaryAmountOrPercentage.rate.percentage = CDec(Elementos(8))
                            Catch ex As Exception
                                ValidaCFDi.AgregaRespuesta("11", 9, "No se pudo realizar la conversion a decimal del dato percentage de la seccion ALLOWANCECHARGE del complemento detallista", Resp)
                            End Try
                        End If
                    End If

                ElseIf (Elementos.Length = 37 And Trim(Elementos(1)).ToUpper = "DETALLISTA" And _
                Trim(Elementos(2)).ToUpper = "LINEITEM") Then
                    If (Detallista.lineItem Is Nothing) Then
                        Detallista.lineItem = New Detallista.detallistaLineItem() {New Detallista.detallistaLineItem()}
                        Detallista.lineItem(0) = New Detallista.detallistaLineItem()
                        If (Elementos(3).Trim <> "") Then
                            Detallista.lineItem(0).type = "SimpleInvoiceLineItemType"
                        End If
                        If (Elementos(4).Trim <> "") Then
                            Detallista.lineItem(0).number = Elementos(4).Trim
                        End If
                        If (Elementos(5).Trim = "") Then
                            ValidaCFDi.AgregaRespuesta("11", 6, "Debe indicar el dato gtin(5) de la seccion LineItem del complemento detallista.", Resp)
                        Else
                            Detallista.lineItem(0).tradeItemIdentification = New Detallista.detallistaLineItemTradeItemIdentification()
                            If (Elementos(5).Trim.Length > 14) Then
                                ValidaCFDi.AgregaRespuesta("11", 6, "El dato gtin (5) de la seccion LINEITEM del complemento detallista no debe ser mayor a 14 caracteres.", Resp)
                            End If
                            Detallista.lineItem(0).tradeItemIdentification.gtin = Elementos(5).Trim
                        End If
                        Detallista.lineItem(0).alternateTradeItemIdentification = New Detallista.detallistaLineItemAlternateTradeItemIdentification() {New Detallista.detallistaLineItemAlternateTradeItemIdentification()}
                        If (Elementos(6).Trim = "") Then
                            ValidaCFDi.AgregaRespuesta("11", 7, "Debe indicar el dato type(6) de la seccion LINEITEM del complemento detallista.", Resp)
                        Else
                            Select Case Elementos(6).Trim.ToUpper
                                Case "BUYER_ASSIGNED"
                                    Detallista.lineItem(0).alternateTradeItemIdentification(0).type = WSPremium.Detallista.detallistaLineItemAlternateTradeItemIdentificationType.BUYER_ASSIGNED
                                Case "SUPPLIER_ASSIGNED"
                                    Detallista.lineItem(0).alternateTradeItemIdentification(0).type = WSPremium.Detallista.detallistaLineItemAlternateTradeItemIdentificationType.SUPPLIER_ASSIGNED
                                Case "SERIAL_NUMBER"
                                    Detallista.lineItem(0).alternateTradeItemIdentification(0).type = WSPremium.Detallista.detallistaLineItemAlternateTradeItemIdentificationType.SERIAL_NUMBER
                                Case "GLOBAL_TRADE_Item_IDENTIFICATION"
                                    Detallista.lineItem(0).alternateTradeItemIdentification(0).type = WSPremium.Detallista.detallistaLineItemAlternateTradeItemIdentificationType.GLOBAL_TRADE_ITEM_IDENTIFICATION
                                Case Else
                                    ValidaCFDi.AgregaRespuesta("11", 7, "Debe indicar un valor correcto en el dato type(6) de la seccion LINETEM del complemento detallista.", Resp)
                            End Select
                        End If
                        If (Elementos(7).Trim = "") Then
                            ValidaCFDi.AgregaRespuesta("11", 8, "Debe indicar el dato valor(7) de la seccion LINEITEM del complemento detallista.", Resp)
                        Else
                            Detallista.lineItem(0).alternateTradeItemIdentification(0).Text = New String() {1}
                            Detallista.lineItem(0).alternateTradeItemIdentification(0).Text(0) = Elementos(7).Trim
                        End If
                        If (Elementos(8).Trim <> "") Then
                            Detallista.lineItem(0).tradeItemDescriptionInformation = New Detallista.detallistaLineItemTradeItemDescriptionInformation()
                            Select Case Elementos(8).Trim.ToUpper
                                Case "ES"
                                    Detallista.lineItem(0).tradeItemDescriptionInformation.language = WSPremium.Detallista.detallistaLineItemTradeItemDescriptionInformationLanguage.ES
                                    Detallista.lineItem(0).tradeItemDescriptionInformation.languageSpecified = True
                                Case "EN"
                                    Detallista.lineItem(0).tradeItemDescriptionInformation.language = WSPremium.Detallista.detallistaLineItemTradeItemDescriptionInformationLanguage.EN
                                    Detallista.lineItem(0).tradeItemDescriptionInformation.languageSpecified = True
                            End Select
                        End If
                        If (Comprobante.Conceptos(CInt(Elementos(4)) - 1).descripcion.Length > 35) Then
                            ValidaCFDi.AgregaRespuesta("11", 5, "El dato descripcion del producto no puede tener una longitud mayor a 35 caracteres.", Resp)
                        End If
                        Detallista.lineItem(0).tradeItemDescriptionInformation.longText = Comprobante.Conceptos(CInt(Elementos(4)) - 1).descripcion
                        Detallista.lineItem(0).invoicedQuantity = New Detallista.detallistaLineItemInvoicedQuantity()
                        Detallista.lineItem(0).invoicedQuantity.unitOfMeasure = Comprobante.Conceptos(CInt(Elementos(4)) - 1).unidad
                        Detallista.lineItem(0).invoicedQuantity.Text = New String() {1}
                        Detallista.lineItem(0).invoicedQuantity.Text(0) = Comprobante.Conceptos(CInt(Elementos(4)) - 1).cantidad.ToString()
                        Detallista.lineItem(0).grossPrice = New Detallista.detallistaLineItemGrossPrice()
                        Detallista.lineItem(0).grossPrice.Amount = Comprobante.Conceptos(CInt(Elementos(4)) - 1).valorUnitario
                        If (Elementos(9).Trim = "") Then
                            ValidaCFDi.AgregaRespuesta("11", 10, "Debe indicar el dato netPrice  (9) de la seccion LINEITEM del complemento detallista.", Resp)
                        Else
                            Detallista.lineItem(0).netPrice = New Detallista.detallistaLineItemNetPrice()
                            Try
                                Detallista.lineItem(0).netPrice.Amount = CDec(Elementos(9).Trim)
                            Catch ex As Exception
                                ValidaCFDi.AgregaRespuesta("11", 10, "No se puede realizar la conversion a decimal del dato netPrice LINEITEM" & ex.Message, Resp)
                            End Try
                        End If
                        If (Elementos(10).Trim <> "" Or Elementos(11).Trim <> "") Then
                            Detallista.lineItem(0).AdditionalInformation = New Detallista.detallistaLineItemAdditionalInformation()
                            Detallista.lineItem(0).AdditionalInformation.referenceIdentification = New Detallista.detallistaLineItemAdditionalInformationReferenceIdentification()
                            Detallista.lineItem(0).AdditionalInformation.referenceIdentification.type = WSPremium.Detallista.detallistaLineItemAdditionalInformationReferenceIdentificationType.ON
                            Detallista.lineItem(0).AdditionalInformation.referenceIdentification.Value = Elementos(11).Trim
                        End If
                        If (Elementos(12).Trim <> "" Or Elementos(13).Trim <> "" Or Elementos(14).Trim <> "" Or Elementos(15).Trim <> "" Or Elementos(16).Trim <> "") Then
                            Detallista.lineItem(0).Customs = New Detallista.detallistaLineItemCustoms() {New Detallista.detallistaLineItemCustoms()}
                            Detallista.lineItem(0).Customs(0) = New Detallista.detallistaLineItemCustoms()
                            If (Elementos(12).Trim <> "") Then
                                If (Elementos(12).Trim.Length <> 13) Then
                                    ValidaCFDi.AgregaRespuesta("11", 13, "El dato Gln(12) customs de la seccion LINEITEM no debe tener una longitud mayor a 13 caracteres.", Resp)
                                End If
                                Detallista.lineItem(0).Customs(0).gln = Elementos(12).Trim
                            End If
                            If (Elementos(13).Trim = "") Then
                                ValidaCFDi.AgregaRespuesta("11", 14, "Debe indicar el dato TypeAlternatePartyIdentificationCustom de la seccion LINEITEM", Resp)
                            Else
                                Detallista.lineItem(0).Customs(0).alternatePartyIdentification = New Detallista.detallistaLineItemCustomsAlternatePartyIdentification()
                                Detallista.lineItem(0).Customs(0).alternatePartyIdentification.type = WSPremium.Detallista.detallistaLineItemCustomsAlternatePartyIdentificationType.TN
                            End If
                            If (Elementos(14).Trim = "") Then
                                ValidaCFDi.AgregaRespuesta("11", 15, "Debe indicar el dato AlternatePartyIdentificationCustom de la seccion LINEITEM", Resp)
                            Else
                                Detallista.lineItem(0).Customs(0).alternatePartyIdentification.Value = Elementos(14).Trim
                            End If
                            If (Elementos(15).Trim = "") Then
                                ValidaCFDi.AgregaRespuesta("11", 16, "Debe indicar el dato referenceDate custom (15) de la seccion LINEITEM del commplemento detallista.", Resp)
                            Else
                                Try
                                    Detallista.lineItem(0).Customs(0).ReferenceDate = CDate(Elementos(15).Trim)
                                Catch ex As Exception
                                    ValidaCFDi.AgregaRespuesta("11", 16, "No se pudo convertir el dato ReferenceDate Custom (15) del complemento detallista", Resp)
                                End Try
                            End If
                            If (Elementos(16).Trim = "") Then
                                ValidaCFDi.AgregaRespuesta("11", 17, "Debe indicar el dato name custom(16) de la seccion LINEITEM del complemento detallista.", Resp)
                            Else
                                Detallista.lineItem(0).Customs(0).nameAndAddress = New Detallista.detallistaLineItemCustomsNameAndAddress()
                                If (Elementos(16).Trim.Length > 35) Then
                                    ValidaCFDi.AgregaRespuesta("11", 17, "El dato name(16) customs de la seccion LINEITEM del complemento detallista no puede tener una longitud mayor a 35 caracteres.", Resp)
                                End If
                                Detallista.lineItem(0).Customs(0).nameAndAddress.name = Elementos(16).Trim
                            End If
                        End If
                        If (Elementos(17).Trim <> "" Or Elementos(18).Trim <> "") Then
                            Detallista.lineItem(0).LogisticUnits = New Detallista.detallistaLineItemLogisticUnits()
                            Detallista.lineItem(0).LogisticUnits.serialShippingContainerCode = New Detallista.detallistaLineItemLogisticUnitsSerialShippingContainerCode()
                            If (Elementos(17).Trim = "") Then
                                ValidaCFDi.AgregaRespuesta("11", 18, "Debe indicar el dato serialChippingContainerCode(17) de la seccion LINEITEM del complemento detallista.", Resp)
                            Else
                                Detallista.lineItem(0).LogisticUnits.serialShippingContainerCode.Value = Elementos(17).Trim
                            End If
                            If (Elementos(18).Trim = "") Then
                            Else
                                Select Case Elementos(18).Trim.ToUpper
                                    Case "BJ"
                                        Detallista.lineItem(0).LogisticUnits.serialShippingContainerCode.type = WSPremium.Detallista.detallistaLineItemLogisticUnitsSerialShippingContainerCodeType.BJ
                                    Case "SRV"
                                        Detallista.lineItem(0).LogisticUnits.serialShippingContainerCode.type = WSPremium.Detallista.detallistaLineItemLogisticUnitsSerialShippingContainerCodeType.SRV
                                    Case Else
                                        ValidaCFDi.AgregaRespuesta("11", 19, "Debe indicar un valor correcto en el dato serialShippingContainerCode type (18) de la seccion LINEITEM del complemento detallista.", Resp)
                                End Select
                            End If
                        End If
                        If (Elementos(19).Trim <> "" Or Elementos(20).Trim <> "" Or Elementos(21).Trim <> "" Or Elementos(22).Trim <> "") Then
                            Detallista.lineItem(0).palletInformation = New Detallista.detallistaLineItemPalletInformation()
                            If (Elementos(19).Trim = "") Then
                                ValidaCFDi.AgregaRespuesta("11", 20, "Debe indicar el dato palletQuantity (19) de la seccion LINEITEM del complemento detallista.", Resp)
                            Else
                                If (Elementos(19).Trim.Length > 15) Then
                                    ValidaCFDi.AgregaRespuesta("11", 20, "El dato palletQuantity (19) de la seccion LINEITEM del complemento detallista no puede tener una longitud mayor a 15 caracteres.", Resp)
                                End If
                                Detallista.lineItem(0).palletInformation.palletQuantity = Elementos(19).Trim
                            End If
                            Detallista.lineItem(0).palletInformation.description = New Detallista.detallistaLineItemPalletInformationDescription()
                            If (Elementos(20).Trim = "") Then
                                ValidaCFDi.AgregaRespuesta("11", 21, "Debe indciar el dato typeDescription (20) de la seccion LINEITEM del complemento detallista.", Resp)
                            Else
                                Select Case Elementos(20).Trim.ToUpper
                                    Case "EXCHANGE_PALLETS"
                                        Detallista.lineItem(0).palletInformation.description.type = WSPremium.Detallista.detallistaLineItemPalletInformationDescriptionType.EXCHANGE_PALLETS
                                    Case "RETURN_PALLETS"
                                        Detallista.lineItem(0).palletInformation.description.type = WSPremium.Detallista.detallistaLineItemPalletInformationDescriptionType.RETURN_PALLETS
                                    Case "PALLET_80X100"
                                        Detallista.lineItem(0).palletInformation.description.type = WSPremium.Detallista.detallistaLineItemPalletInformationDescriptionType.PALLET_80x100
                                    Case "CASE"
                                        Detallista.lineItem(0).palletInformation.description.type = WSPremium.Detallista.detallistaLineItemPalletInformationDescriptionType.CASE
                                    Case "BOX"
                                        Detallista.lineItem(0).palletInformation.description.type = WSPremium.Detallista.detallistaLineItemPalletInformationDescriptionType.BOX
                                    Case Else
                                        ValidaCFDi.AgregaRespuesta("11", 21, "Debe indicar un valor correcto en el dato typeDescription (20) de la seccion LINEITEM del complemento detallista.", Resp)
                                End Select
                            End If
                            If (Elementos(21).Trim = "") Then
                                ValidaCFDi.AgregaRespuesta("11", 22, "Debe indicar el dato description(21) de la seccion LINEITEM del complemento detallista.", Resp)
                            Else
                                Detallista.lineItem(0).palletInformation.description.Text = New String() {1}
                                Detallista.lineItem(0).palletInformation.description.Text(0) = Elementos(21).Trim
                            End If
                            If (Elementos(22).Trim = "") Then
                                ValidaCFDi.AgregaRespuesta("11", 23, "Debe indicar el dato methodOfPayment (22) de la seccion LINEITEM del complemento detallista.", Resp)
                            Else
                                Detallista.lineItem(0).palletInformation.transport = New Detallista.detallistaLineItemPalletInformationTransport()
                                Select Case Elementos(22).Trim.ToUpper
                                    Case "PREPAID_BY_SELLER"
                                        Detallista.lineItem(0).palletInformation.transport.methodOfPayment = WSPremium.Detallista.detallistaLineItemPalletInformationTransportMethodOfPayment.PREPAID_BY_SELLER
                                    Case "PAID_BY_BUYER"
                                        Detallista.lineItem(0).palletInformation.transport.methodOfPayment = WSPremium.Detallista.detallistaLineItemPalletInformationTransportMethodOfPayment.PAID_BY_BUYER
                                    Case Else
                                        ValidaCFDi.AgregaRespuesta("11", 23, "Debe indicar un valor correcto en el dato methodOfPayment (22) de la seccion LINEITEM del complemento detallista.", Resp)
                                End Select
                            End If
                        End If
                        If (Elementos(23).Trim <> "") Then
                            Detallista.lineItem(0).extendedAttributes = New Detallista.detallistaLineItemLotNumber() {New Detallista.detallistaLineItemLotNumber()}
                            Detallista.lineItem(0).extendedAttributes(0) = New Detallista.detallistaLineItemLotNumber()
                            Detallista.lineItem(0).extendedAttributes(0).Value = Elementos(23).Trim
                            If (Elementos(24).Trim <> "") Then
                                Try
                                    Detallista.lineItem(0).extendedAttributes(0).productionDate = CDate(Elementos(24).Trim)
                                    Detallista.lineItem(0).extendedAttributes(0).productionDateSpecified = True
                                Catch ex As Exception
                                    ValidaCFDi.AgregaRespuesta("11", 25, "No se pudo realizar la conversion en fecha extendedAttributes ProductionDate LINEITEM.", Resp)
                                End Try
                            End If
                        End If
                        If (Elementos(25).Trim <> "" Or Elementos(26).Trim <> "" Or Elementos(27).Trim <> "" Or Elementos(28).Trim <> "" Or Elementos(29).Trim <> "" Or _
                           Elementos(30).Trim <> "") Then
                            Detallista.lineItem(0).allowanceCharge = New Detallista.detallistaLineItemAllowanceCharge() {New Detallista.detallistaLineItemAllowanceCharge()}
                            Detallista.lineItem(0).allowanceCharge(0) = New Detallista.detallistaLineItemAllowanceCharge()
                            If (Elementos(25).Trim = "") Then
                                ValidaCFDi.AgregaRespuesta("11", 26, "Debe indicar el dato AllowanceChargeType (25) en la seccion LINEITEM del complemento detallista.", Resp)
                            Else
                                Select Case Elementos(25).Trim.ToUpper
                                    Case "ALLOWANCE_GLOBAL"
                                        Detallista.lineItem(0).allowanceCharge(0).allowanceChargeType = WSPremium.Detallista.detallistaLineItemAllowanceChargeAllowanceChargeType.ALLOWANCE_GLOBAL
                                    Case "CHARGE_GLOBAL"
                                        Detallista.lineItem(0).allowanceCharge(0).allowanceChargeType = WSPremium.Detallista.detallistaLineItemAllowanceChargeAllowanceChargeType.CHARGE_GLOBAL
                                    Case Else
                                        ValidaCFDi.AgregaRespuesta("11", 26, "Debe indicar un valor correcto en el dato AllowanceChargeType (25) de la seccion LINEITEM del complemento detallista. ", Resp)
                                End Select
                            End If
                            If (Elementos(26).Trim <> "") Then
                                Detallista.lineItem(0).allowanceCharge(0).settlementType = New Detallista.detallistaLineItemAllowanceChargeSettlementType()
                                Select Case Elementos(26).Trim.ToUpper
                                    Case "OFF_INVOICE"
                                        Detallista.lineItem(0).allowanceCharge(0).settlementType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSettlementType.OFF_INVOICE
                                    Case "CHARGE_TO_BE_PAID_BY_VENDOR"
                                        Detallista.lineItem(0).allowanceCharge(0).settlementType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSettlementType.CHARGE_TO_BE_PAID_BY_VENDOR
                                    Case "CHARGE_TO_BE_PAID_BY_CUSTOMER"
                                        Detallista.lineItem(0).allowanceCharge(0).settlementType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSettlementType.CHARGE_TO_BE_PAID_BY_CUSTOMER
                                    Case Else
                                        ValidaCFDi.AgregaRespuesta("11", 27, "Debe indicar un valor correcto en el dato settlementType (26) en la seccion LINEITEM del complemento detallista.", Resp)
                                End Select
                            End If
                            If (Elementos(27).Trim <> "") Then
                                If (Elementos(27).Trim.Length > 15) Then
                                    ValidaCFDi.AgregaRespuesta("11", 28, "El dato sequenceNumber (27) de la seccion LINEITEM del complemento detallista no puede tener una longitud mayor a 15 caracteres.", Resp)
                                End If
                                Detallista.lineItem(0).allowanceCharge(0).sequenceNumber = Elementos(27).Trim
                            End If
                            If (Elementos(28).Trim <> "") Then
                                Detallista.lineItem(0).allowanceCharge(0).specialServicesType = New Detallista.detallistaLineItemAllowanceChargeSpecialServicesType()
                                Select Case Elementos(28).Trim.ToUpper
                                    Case "AA"
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.AA
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "ADS"
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.ADS
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "ADO"
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.ADO
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "ABZ"
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.ABZ
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "DA"
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.DA
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "EAA"
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.EAA
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "PI"
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.PI
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "TAE"
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.TAE
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "SAB"
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.SAB
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "RAA"
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.RAA
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "PAD"
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.PAD
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "FG"
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.FG
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "FA"
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.FA
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "TD"
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.TD
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "TS"
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.TS
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "TX"
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.TX
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "ZZZ"
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.ZZZ
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "VAB"
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.VAB
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "UM"
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.UM
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "DI"
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.DI
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "ADT"
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.ADT
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "AJ"
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.AJ
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "CAC"
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.CAC
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "COD"
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.COD
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "EAB"
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.EAB
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "FC"
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.FC
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "FI"
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.FI
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "HD"
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.HD
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "QD"
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.QD
                                        Detallista.lineItem(0).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case Else
                                        ValidaCFDi.AgregaRespuesta("11", 29, "Debe indicar un valor correcto en el campo specialServicesType (28) de la seccion LINEITEM del complemento detallista.", Resp)
                                End Select
                            End If
                            If (Elementos(29).Trim <> "" Or Elementos(30).Trim <> "") Then
                                Detallista.lineItem(0).allowanceCharge(0).monetaryAmountOrPercentage = New Detallista.detallistaLineItemAllowanceChargeMonetaryAmountOrPercentage()
                                If (Elementos(29).Trim = "") Then
                                    ValidaCFDi.AgregaRespuesta("11", 30, "Debe indicar el dato percentagePerUnit (29) de la seccion LINEITEM del complemento detallista.", Resp)
                                Else
                                    If (Elementos(29).Trim.Length > 5) Then
                                        ValidaCFDi.AgregaRespuesta("11", 30, "El dato percentagePerUnit (29) de la seccion LINEITEM del complemento detallista no puede tener una longitud mayor a 5 caracteres.", Resp)
                                    End If
                                    Detallista.lineItem(0).allowanceCharge(0).monetaryAmountOrPercentage.percentagePerUnit = Elementos(29)
                                End If
                                If (Elementos(30).Trim = "") Then
                                    ValidaCFDi.AgregaRespuesta("11", 31, "Debe indicar el dato amountPerUnit (30) de la seccion LINEITEM del complemento detallista.", Resp)
                                Else
                                    Detallista.lineItem(0).allowanceCharge(0).monetaryAmountOrPercentage.ratePerUnit = New Detallista.detallistaLineItemAllowanceChargeMonetaryAmountOrPercentageRatePerUnit()
                                    If (Elementos(30).Trim.Length > 5) Then
                                        ValidaCFDi.AgregaRespuesta("11", 31, "El dato amountPerUnit (30) de la seccion LINEITEM del complemento detallista no puede tener una longitud mayor a 5 caracteres.", Resp)
                                    End If
                                    Detallista.lineItem(0).allowanceCharge(0).monetaryAmountOrPercentage.ratePerUnit.amountPerUnit = Elementos(30)
                                End If
                            End If
                        End If
                        If (Elementos(31).Trim <> "" Or Elementos(32).Trim <> "" Or Elementos(33).Trim <> "" Or Elementos(34).Trim <> "" Or Elementos(35).Trim <> "") Then
                            Detallista.lineItem(0).tradeItemTaxInformation = New Detallista.detallistaLineItemTradeItemTaxInformation() {New Detallista.detallistaLineItemTradeItemTaxInformation()}
                            If (Elementos(31).Trim = "") Then
                                ValidaCFDi.AgregaRespuesta("11", 32, "Debe indicar el dato taxTypeDescription (31) de la seccion LINEITEM del complemento detallista.", Resp)
                            Else
                                Select Case Elementos(31).Trim.ToUpper
                                    Case "GST"
                                        Detallista.lineItem(0).tradeItemTaxInformation(0).taxTypeDescription = WSPremium.Detallista.detallistaLineItemTradeItemTaxInformationTaxTypeDescription.AAA
                                    Case "VAT"
                                        Detallista.lineItem(0).tradeItemTaxInformation(0).taxTypeDescription = WSPremium.Detallista.detallistaLineItemTradeItemTaxInformationTaxTypeDescription.AAA
                                    Case "LAC"
                                        Detallista.lineItem(0).tradeItemTaxInformation(0).taxTypeDescription = WSPremium.Detallista.detallistaLineItemTradeItemTaxInformationTaxTypeDescription.AAA
                                    Case "AAA"
                                        Detallista.lineItem(0).tradeItemTaxInformation(0).taxTypeDescription = WSPremium.Detallista.detallistaLineItemTradeItemTaxInformationTaxTypeDescription.AAA
                                    Case "ADD"
                                        Detallista.lineItem(0).tradeItemTaxInformation(0).taxTypeDescription = WSPremium.Detallista.detallistaLineItemTradeItemTaxInformationTaxTypeDescription.AAA
                                    Case "FRE"
                                        Detallista.lineItem(0).tradeItemTaxInformation(0).taxTypeDescription = WSPremium.Detallista.detallistaLineItemTradeItemTaxInformationTaxTypeDescription.AAA
                                    Case "LOC"
                                        Detallista.lineItem(0).tradeItemTaxInformation(0).taxTypeDescription = WSPremium.Detallista.detallistaLineItemTradeItemTaxInformationTaxTypeDescription.AAA
                                    Case "STT"
                                        Detallista.lineItem(0).tradeItemTaxInformation(0).taxTypeDescription = WSPremium.Detallista.detallistaLineItemTradeItemTaxInformationTaxTypeDescription.AAA
                                    Case "OTH"
                                        Detallista.lineItem(0).tradeItemTaxInformation(0).taxTypeDescription = WSPremium.Detallista.detallistaLineItemTradeItemTaxInformationTaxTypeDescription.AAA
                                End Select
                            End If
                            If (Elementos(32).Trim <> "") Then
                                If (Elementos(32).Trim.Length > 20) Then
                                    ValidaCFDi.AgregaRespuesta("11", 33, "El dato referenceNumber (32) de la seccion LINEITEM del complemento detallista no puede tener una longitud mayor a 20 caracteres.", Resp)
                                End If
                                Detallista.lineItem(0).tradeItemTaxInformation(0).referenceNumber = Elementos(32).Trim
                            End If
                            Detallista.lineItem(0).tradeItemTaxInformation(0).tradeItemTaxAmount = New Detallista.detallistaLineItemTradeItemTaxInformationTradeItemTaxAmount()
                            If (Elementos(33).Trim = "") Then
                                ValidaCFDi.AgregaRespuesta("11", 34, "Debe indicar el dato taxPercentage (33) de la seccion LINEITEM del complemento detallista.", Resp)
                            Else
                                Try
                                    Detallista.lineItem(0).tradeItemTaxInformation(0).tradeItemTaxAmount.taxPercentage = CDec(Elementos(33).Trim)
                                Catch ex As Exception
                                    ValidaCFDi.AgregaRespuesta("11", 34, "No se pudo realizar la conversion a decimal de taxPercentage LineItem", Resp)
                                End Try
                            End If
                            If (Elementos(34).Trim = "") Then
                                ValidaCFDi.AgregaRespuesta("11", 35, "Debe indicar el dato taxAmount (34) de la seccion LINEITEM del complemento detallista.", Resp)
                            Else
                                Try
                                    Detallista.lineItem(0).tradeItemTaxInformation(0).tradeItemTaxAmount.taxAmount = CDec(Elementos(34).Trim)
                                Catch ex As Exception
                                    ValidaCFDi.AgregaRespuesta("11", 35, "No se pudo convertir taxAmount LineItem a decimal.", Resp)
                                End Try
                            End If
                            If (Elementos(35).Trim <> "") Then
                                Select Case Elementos(35).Trim.ToUpper
                                    Case "TRANSFERIDO"
                                        Detallista.lineItem(0).tradeItemTaxInformation(0).taxCategory = WSPremium.Detallista.detallistaLineItemTradeItemTaxInformationTaxCategory.TRANSFERIDO
                                        Detallista.lineItem(0).tradeItemTaxInformation(0).taxCategorySpecified = True
                                    Case "RETENIDO"
                                        Detallista.lineItem(0).tradeItemTaxInformation(0).taxCategory = WSPremium.Detallista.detallistaLineItemTradeItemTaxInformationTaxCategory.RETENIDO
                                        Detallista.lineItem(0).tradeItemTaxInformation(0).taxCategorySpecified = True
                                    Case Else
                                        ValidaCFDi.AgregaRespuesta("11", 36, "Debe indicar un valor correcto en el dato taxcategory (35) de la seccion LINEITEM del complemento detallista.", Resp)
                                End Select
                            End If
                        End If
                        Detallista.lineItem(0).totalLineAmount = New Detallista.detallistaLineItemTotalLineAmount()
                        Detallista.lineItem(0).totalLineAmount.grossAmount = New Detallista.detallistaLineItemTotalLineAmountGrossAmount()
                        Detallista.lineItem(0).totalLineAmount.grossAmount.Amount = Comprobante.Conceptos(CInt(Elementos(4)) - 1).importe
                        Detallista.lineItem(0).totalLineAmount.netAmount = New Detallista.detallistaLineItemTotalLineAmountNetAmount()
                        Try
                            Detallista.lineItem(0).totalLineAmount.netAmount.Amount = CDec(Elementos(36).Trim)
                        Catch ex As Exception
                            ValidaCFDi.AgregaRespuesta("11", 37, "No se pudo realizar la conversion a decimal del dato NetAmount LineItem del complemento detallista.", Resp)
                        End Try

                    Else
                        ReDim Preserve Detallista.lineItem(Detallista.lineItem.Length)
                        Detallista.lineItem(Detallista.lineItem.Length - 1) = New Detallista.detallistaLineItem()
                        If (Elementos(3).Trim <> "") Then
                            Detallista.lineItem(Detallista.lineItem.Length - 1).type = Elementos(3).Trim
                        End If
                        If (Elementos(4).Trim <> "") Then
                            Detallista.lineItem(Detallista.lineItem.Length - 1).number = Elementos(4).Trim
                        End If
                        If (Elementos(5).Trim = "") Then
                            ValidaCFDi.AgregaRespuesta("11", 6, "Debe indicar el dato gtin(5) de la seccion LineItem del complemento detallista.", Resp)
                        Else
                            Detallista.lineItem(Detallista.lineItem.Length - 1).tradeItemIdentification = New Detallista.detallistaLineItemTradeItemIdentification()
                            If (Elementos(5).Trim.Length > 14) Then
                                ValidaCFDi.AgregaRespuesta("11", 6, "El dato gtin (5) de la seccion LINEITEM del complemento detallista no debe ser mayor a 14 caracteres.", Resp)
                            End If
                            Detallista.lineItem(Detallista.lineItem.Length - 1).tradeItemIdentification.gtin = Elementos(5).Trim
                        End If
                        Detallista.lineItem(Detallista.lineItem.Length - 1).alternateTradeItemIdentification = New Detallista.detallistaLineItemAlternateTradeItemIdentification() {New Detallista.detallistaLineItemAlternateTradeItemIdentification()}
                        If (Elementos(6).Trim = "") Then
                            ValidaCFDi.AgregaRespuesta("11", 7, "Debe indicar el dato type(6) de la seccion LINEITEM del complemento detallista.", Resp)
                        Else
                            Select Case Elementos(6).Trim.ToUpper
                                Case "BUYER_ASSIGNED"
                                    Detallista.lineItem(Detallista.lineItem.Length - 1).alternateTradeItemIdentification(0).type = WSPremium.Detallista.detallistaLineItemAlternateTradeItemIdentificationType.BUYER_ASSIGNED
                                Case "SUPPLIER_ASSIGNED"
                                    Detallista.lineItem(Detallista.lineItem.Length - 1).alternateTradeItemIdentification(0).type = WSPremium.Detallista.detallistaLineItemAlternateTradeItemIdentificationType.SUPPLIER_ASSIGNED
                                Case "SERIAL_NUMBER"
                                    Detallista.lineItem(Detallista.lineItem.Length - 1).alternateTradeItemIdentification(0).type = WSPremium.Detallista.detallistaLineItemAlternateTradeItemIdentificationType.SERIAL_NUMBER
                                Case "GLOBAL_TRADE_Item_IDENTIFICATION"
                                    Detallista.lineItem(Detallista.lineItem.Length - 1).alternateTradeItemIdentification(0).type = WSPremium.Detallista.detallistaLineItemAlternateTradeItemIdentificationType.GLOBAL_TRADE_ITEM_IDENTIFICATION
                                Case Else
                                    ValidaCFDi.AgregaRespuesta("11", 7, "Debe indicar un valor correcto en el dato type(6) de la seccion LINETEM del complemento detallista.", Resp)
                            End Select
                        End If
                        If (Elementos(7).Trim = "") Then
                            ValidaCFDi.AgregaRespuesta("11", 8, "Debe indicar el dato valor(7) de la seccion LINEITEM del complemento detallista.", Resp)
                        Else
                            Detallista.lineItem(Detallista.lineItem.Length - 1).alternateTradeItemIdentification(0).Text = New String() {1}
                            Detallista.lineItem(Detallista.lineItem.Length - 1).alternateTradeItemIdentification(0).Text(0) = Elementos(7).Trim
                        End If
                        If (Elementos(8).Trim <> "") Then
                            Detallista.lineItem(Detallista.lineItem.Length - 1).tradeItemDescriptionInformation = New Detallista.detallistaLineItemTradeItemDescriptionInformation()
                            Select Case Elementos(8).ToUpper
                                Case "ES"
                                    Detallista.lineItem(Detallista.lineItem.Length - 1).tradeItemDescriptionInformation.language = WSPremium.Detallista.detallistaLineItemTradeItemDescriptionInformationLanguage.ES
                                    Detallista.lineItem(Detallista.lineItem.Length - 1).tradeItemDescriptionInformation.languageSpecified = True
                                Case "EN"
                                    Detallista.lineItem(Detallista.lineItem.Length - 1).tradeItemDescriptionInformation.language = WSPremium.Detallista.detallistaLineItemTradeItemDescriptionInformationLanguage.EN
                                    Detallista.lineItem(Detallista.lineItem.Length - 1).tradeItemDescriptionInformation.languageSpecified = True
                            End Select
                        End If
                        If (Comprobante.Conceptos(CInt(Elementos(4)) - 1).descripcion.Length > 35) Then
                            ValidaCFDi.AgregaRespuesta("11", 5, "El dato descripcion del producto no puede tener una longitud mayor a 35 caracteres.", Resp)
                        End If
                        Detallista.lineItem(Detallista.lineItem.Length - 1).tradeItemDescriptionInformation.longText = Comprobante.Conceptos(CInt(Elementos(4)) - 1).descripcion
                        Detallista.lineItem(Detallista.lineItem.Length - 1).invoicedQuantity = New Detallista.detallistaLineItemInvoicedQuantity()
                        Detallista.lineItem(Detallista.lineItem.Length - 1).invoicedQuantity.unitOfMeasure = Comprobante.Conceptos(CInt(Elementos(4)) - 1).unidad
                        Detallista.lineItem(Detallista.lineItem.Length - 1).invoicedQuantity.Text = New String() {1}
                        Detallista.lineItem(Detallista.lineItem.Length - 1).invoicedQuantity.Text(0) = Comprobante.Conceptos(CInt(Elementos(4)) - 1).cantidad.ToString()
                        Detallista.lineItem(Detallista.lineItem.Length - 1).grossPrice = New Detallista.detallistaLineItemGrossPrice()
                        Detallista.lineItem(Detallista.lineItem.Length - 1).grossPrice.Amount = Comprobante.Conceptos(CInt(Elementos(4)) - 1).valorUnitario
                        If (Elementos(9).Trim = "") Then
                            ValidaCFDi.AgregaRespuesta("11", 10, "Debe indicar el dato netPrice  (9) de la seccion LINEITEM del complemento detallista.", Resp)
                        Else
                            Detallista.lineItem(Detallista.lineItem.Length - 1).netPrice = New Detallista.detallistaLineItemNetPrice()
                            Try
                                Detallista.lineItem(Detallista.lineItem.Length - 1).netPrice.Amount = CDec(Elementos(9).Trim)
                            Catch ex As Exception
                                ValidaCFDi.AgregaRespuesta("11", 10, "No se puede realizar la conversion a decimal del dato netPrice LINEITEM" & ex.Message, Resp)
                            End Try
                        End If
                        If (Elementos(10).Trim <> "" Or Elementos(11).Trim <> "") Then
                            Detallista.lineItem(Detallista.lineItem.Length - 1).AdditionalInformation = New Detallista.detallistaLineItemAdditionalInformation()
                            Detallista.lineItem(Detallista.lineItem.Length - 1).AdditionalInformation.referenceIdentification = New Detallista.detallistaLineItemAdditionalInformationReferenceIdentification()
                            Detallista.lineItem(Detallista.lineItem.Length - 1).AdditionalInformation.referenceIdentification.type = WSPremium.Detallista.detallistaLineItemAdditionalInformationReferenceIdentificationType.ON
                            Detallista.lineItem(Detallista.lineItem.Length - 1).AdditionalInformation.referenceIdentification.Value = Elementos(11).Trim
                        End If
                        If (Elementos(12).Trim <> "" Or Elementos(13).Trim <> "" Or Elementos(14).Trim <> "" Or Elementos(15).Trim <> "" Or Elementos(16).Trim <> "") Then
                            Detallista.lineItem(Detallista.lineItem.Length - 1).Customs = New Detallista.detallistaLineItemCustoms() {New Detallista.detallistaLineItemCustoms()}
                            Detallista.lineItem(Detallista.lineItem.Length - 1).Customs(0) = New Detallista.detallistaLineItemCustoms()
                            If (Elementos(12).Trim <> "") Then
                                If (Elementos(12).Trim.Length <> 13) Then
                                    ValidaCFDi.AgregaRespuesta("11", 13, "El dato Gln(12) customs de la seccion LINEITEM no debe tener una longitud mayor a 13 caracteres.", Resp)
                                End If
                                Detallista.lineItem(Detallista.lineItem.Length - 1).Customs(0).gln = Elementos(12).Trim
                            End If
                            If (Elementos(13).Trim = "") Then
                                ValidaCFDi.AgregaRespuesta("11", 14, "Debe indicar el dato TypeAlternatePartyIdentificationCustomType de la seccion LINEITEM", Resp)
                            Else
                                Detallista.lineItem(Detallista.lineItem.Length - 1).Customs(0).alternatePartyIdentification = New Detallista.detallistaLineItemCustomsAlternatePartyIdentification()
                                Detallista.lineItem(Detallista.lineItem.Length - 1).Customs(0).alternatePartyIdentification.type = WSPremium.Detallista.detallistaLineItemCustomsAlternatePartyIdentificationType.TN
                            End If
                            If (Elementos(14).Trim = "") Then
                                ValidaCFDi.AgregaRespuesta("11", 15, "Debe indicar el dato AlternatePartyIdentificationCustom de la seccion LINEITEM", Resp)
                            Else
                                Detallista.lineItem(Detallista.lineItem.Length - 1).Customs(0).alternatePartyIdentification.Value = Elementos(14).Trim
                            End If
                            If (Elementos(15).Trim = "") Then
                                ValidaCFDi.AgregaRespuesta("11", 16, "Debe indicar el dato referenceDate custom (15) de la seccion LINEITEM del commplemento detallista.", Resp)
                            Else
                                Try
                                    Detallista.lineItem(Detallista.lineItem.Length - 1).Customs(0).ReferenceDate = CDate(Elementos(15).Trim)
                                Catch ex As Exception
                                    ValidaCFDi.AgregaRespuesta("11", 16, "No se pudo convertir el dato ReferenceDate Custom (15) del complemento detallista", Resp)
                                End Try
                            End If
                            If (Elementos(16).Trim = "") Then
                                ValidaCFDi.AgregaRespuesta("11", 17, "Debe indicar el dato name custom(16) de la seccion LINEITEM del complemento detallista.", Resp)
                            Else
                                Detallista.lineItem(Detallista.lineItem.Length - 1).Customs(0).nameAndAddress = New Detallista.detallistaLineItemCustomsNameAndAddress()
                                If (Elementos(16).Trim.Length > 35) Then
                                    ValidaCFDi.AgregaRespuesta("11", 17, "El dato name(16) customs de la seccion LINEITEM del complemento detallista no puede tener una longitud mayor a 35 caracteres.", Resp)
                                End If
                                Detallista.lineItem(Detallista.lineItem.Length - 1).Customs(0).nameAndAddress.name = Elementos(16).Trim
                            End If
                        End If
                        If (Elementos(17).Trim <> "" Or Elementos(18).Trim <> "") Then
                            Detallista.lineItem(Detallista.lineItem.Length - 1).LogisticUnits = New Detallista.detallistaLineItemLogisticUnits()
                            Detallista.lineItem(Detallista.lineItem.Length - 1).LogisticUnits.serialShippingContainerCode = New Detallista.detallistaLineItemLogisticUnitsSerialShippingContainerCode()
                            If (Elementos(17).Trim = "") Then
                                ValidaCFDi.AgregaRespuesta("11", 18, "Debe indicar el dato serialChippingContainerCode(17) de la seccion LINEITEM del complemento detallista.", Resp)
                            Else
                                Detallista.lineItem(Detallista.lineItem.Length - 1).LogisticUnits.serialShippingContainerCode.Value = Elementos(17).Trim
                            End If
                            If (Elementos(18).Trim = "") Then
                            Else
                                Select Case Elementos(18).Trim.ToUpper
                                    Case "BJ"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).LogisticUnits.serialShippingContainerCode.type = WSPremium.Detallista.detallistaLineItemLogisticUnitsSerialShippingContainerCodeType.BJ
                                    Case "SRV"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).LogisticUnits.serialShippingContainerCode.type = WSPremium.Detallista.detallistaLineItemLogisticUnitsSerialShippingContainerCodeType.SRV
                                    Case Else
                                        ValidaCFDi.AgregaRespuesta("11", 19, "Debe indicar un valor correcto en el dato serialShippingContainerCode type (18) de la seccion LINEITEM del complemento detallista.", Resp)
                                End Select
                            End If
                        End If
                        If (Elementos(19).Trim <> "" Or Elementos(20).Trim <> "" Or Elementos(21).Trim <> "" Or Elementos(22).Trim <> "") Then
                            Detallista.lineItem(Detallista.lineItem.Length - 1).palletInformation = New Detallista.detallistaLineItemPalletInformation()
                            If (Elementos(19).Trim = "") Then
                                ValidaCFDi.AgregaRespuesta("11", 20, "Debe indicar el dato palletQuantity (19) de la seccion LINEITEM del complemento detallista.", Resp)
                            Else
                                If (Elementos(19).Trim.Length > 15) Then
                                    ValidaCFDi.AgregaRespuesta("11", 20, "El dato palletQuantity (19) de la seccion LINEITEM del complemento detallista no puede tener una longitud mayor a 15 caracteres.", Resp)
                                End If
                                Detallista.lineItem(Detallista.lineItem.Length - 1).palletInformation.palletQuantity = Elementos(19).Trim
                            End If
                            Detallista.lineItem(Detallista.lineItem.Length - 1).palletInformation.description = New Detallista.detallistaLineItemPalletInformationDescription()
                            If (Elementos(20).Trim = "") Then
                                ValidaCFDi.AgregaRespuesta("11", 21, "Debe indciar el dato typeDescription (20) de la seccion LINEITEM del complemento detallista.", Resp)
                            Else
                                Select Case Elementos(20).Trim.ToUpper
                                    Case "EXCHANGE_PALLETS"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).palletInformation.description.type = WSPremium.Detallista.detallistaLineItemPalletInformationDescriptionType.EXCHANGE_PALLETS
                                    Case "RETURN_PALLETS"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).palletInformation.description.type = WSPremium.Detallista.detallistaLineItemPalletInformationDescriptionType.RETURN_PALLETS
                                    Case "PALLET_80X100"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).palletInformation.description.type = WSPremium.Detallista.detallistaLineItemPalletInformationDescriptionType.PALLET_80x100
                                    Case "CASE"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).palletInformation.description.type = WSPremium.Detallista.detallistaLineItemPalletInformationDescriptionType.CASE
                                    Case "BOX"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).palletInformation.description.type = WSPremium.Detallista.detallistaLineItemPalletInformationDescriptionType.BOX
                                    Case Else
                                        ValidaCFDi.AgregaRespuesta("11", 21, "Debe indicar un valor correcto en el dato typeDescription (20) de la seccion LINEITEM del complemento detallista.", Resp)
                                End Select
                            End If
                            If (Elementos(21).Trim = "") Then
                                ValidaCFDi.AgregaRespuesta("11", 22, "Debe indicar el dato description(21) de la seccion LINEITEM del complemento detallista.", Resp)
                            Else
                                Detallista.lineItem(Detallista.lineItem.Length - 1).palletInformation.description.Text = New String() {1}
                                Detallista.lineItem(Detallista.lineItem.Length - 1).palletInformation.description.Text(0) = Elementos(21).Trim
                            End If
                            If (Elementos(22).Trim = "") Then
                                ValidaCFDi.AgregaRespuesta("11", 23, "Debe indicar el dato methodOfPayment (22) de la seccion LINEITEM del complemento detallista.", Resp)
                            Else
                                Detallista.lineItem(Detallista.lineItem.Length - 1).palletInformation.transport = New Detallista.detallistaLineItemPalletInformationTransport()
                                Select Case Elementos(22).Trim.ToUpper
                                    Case "PREPAID_BY_SELLER"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).palletInformation.transport.methodOfPayment = WSPremium.Detallista.detallistaLineItemPalletInformationTransportMethodOfPayment.PREPAID_BY_SELLER
                                    Case "PAID_BY_BUYER"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).palletInformation.transport.methodOfPayment = WSPremium.Detallista.detallistaLineItemPalletInformationTransportMethodOfPayment.PAID_BY_BUYER
                                    Case Else
                                        ValidaCFDi.AgregaRespuesta("11", 23, "Debe indicar un valor correcto en el dato methodOfPayment (22) de la seccion LINEITEM del complemento detallista.", Resp)
                                End Select
                            End If
                        End If
                        If (Elementos(23).Trim <> "") Then
                            Detallista.lineItem(Detallista.lineItem.Length - 1).extendedAttributes = New Detallista.detallistaLineItemLotNumber() {New Detallista.detallistaLineItemLotNumber()}
                            Detallista.lineItem(Detallista.lineItem.Length - 1).extendedAttributes(0) = New Detallista.detallistaLineItemLotNumber()
                            Detallista.lineItem(Detallista.lineItem.Length - 1).extendedAttributes(0).Value = Elementos(23).Trim
                            If (Elementos(24).Trim <> "") Then
                                Try
                                    Detallista.lineItem(Detallista.lineItem.Length - 1).extendedAttributes(0).productionDate = CDate(Elementos(24).Trim)
                                    Detallista.lineItem(Detallista.lineItem.Length - 1).extendedAttributes(0).productionDateSpecified = True
                                Catch ex As Exception
                                    ValidaCFDi.AgregaRespuesta("11", 25, "No se pudo realizar la conversion en fecha extendedAttributes ProductionDate LINEITEM.", Resp)
                                End Try
                            End If
                        End If
                        If (Elementos(25).Trim <> "" Or Elementos(26).Trim <> "" Or Elementos(27).Trim <> "" Or Elementos(28).Trim <> "" Or Elementos(29).Trim <> "" Or _
                           Elementos(30).Trim <> "") Then
                            Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge = New Detallista.detallistaLineItemAllowanceCharge() {New Detallista.detallistaLineItemAllowanceCharge()}
                            Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0) = New Detallista.detallistaLineItemAllowanceCharge()
                            If (Elementos(25).Trim = "") Then
                                ValidaCFDi.AgregaRespuesta("11", 26, "Debe indicar el dato AllowanceChargeType (25) en la seccion LINEITEM del complemento detallista.", Resp)
                            Else
                                Select Case Elementos(25).Trim.ToUpper
                                    Case "ALLOWANCE_GLOBAL"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).allowanceChargeType = WSPremium.Detallista.detallistaLineItemAllowanceChargeAllowanceChargeType.ALLOWANCE_GLOBAL
                                    Case "CHARGE_GLOBAL"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).allowanceChargeType = WSPremium.Detallista.detallistaLineItemAllowanceChargeAllowanceChargeType.CHARGE_GLOBAL
                                    Case Else
                                        ValidaCFDi.AgregaRespuesta("11", 26, "Debe indicar un valor correcto en el dato AllowanceChargeType (25) de la seccion LINEITEM del complemento detallista. ", Resp)
                                End Select
                            End If
                            If (Elementos(26).Trim <> "") Then
                                Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).settlementType = New Detallista.detallistaLineItemAllowanceChargeSettlementType()
                                Select Case Elementos(26).Trim.ToUpper
                                    Case "OFF_INVOICE"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).settlementType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSettlementType.OFF_INVOICE
                                    Case "CHARGE_TO_BE_PAID_BY_VENDOR"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).settlementType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSettlementType.CHARGE_TO_BE_PAID_BY_VENDOR
                                    Case "CHARGE_TO_BE_PAID_BY_CUSTOMER"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).settlementType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSettlementType.CHARGE_TO_BE_PAID_BY_CUSTOMER
                                    Case Else
                                        ValidaCFDi.AgregaRespuesta("11", 27, "Debe indicar un valor correcto en el dato settlementType (26) en la seccion LINEITEM del complemento detallista.", Resp)
                                End Select
                            End If
                            If (Elementos(27).Trim <> "") Then
                                If (Elementos(27).Trim.Length > 15) Then
                                    ValidaCFDi.AgregaRespuesta("11", 28, "El dato sequenceNumber (27) de la seccion LINEITEM del complemento detallista no puede tener una longitud mayor a 15 caracteres.", Resp)
                                End If
                                Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).sequenceNumber = Elementos(27).Trim
                            End If
                            If (Elementos(28).Trim <> "") Then
                                Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesType = New Detallista.detallistaLineItemAllowanceChargeSpecialServicesType()
                                Select Case Elementos(28).Trim.ToUpper
                                    Case "AA"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.AA
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "ADS"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.ADS
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "ADO"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.ADO
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "ABZ"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.ABZ
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "DA"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.DA
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "EAA"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.EAA
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "PI"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.PI
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "TAE"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.TAE
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "SAB"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.SAB
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "RAA"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.RAA
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "PAD"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.PAD
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "FG"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.FG
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "FA"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.FA
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "TD"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.TD
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "TS"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.TS
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "TX"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.TX
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "ZZZ"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.ZZZ
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "VAB"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.VAB
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "UM"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.UM
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "DI"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.DI
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "ADT"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.ADT
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "AJ"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.AJ
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "CAC"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.CAC
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "COD"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.COD
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "EAB"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.EAB
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "FC"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.FC
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "FI"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.FI
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "HD"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.HD
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case "QD"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaLineItemAllowanceChargeSpecialServicesType.QD
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).specialServicesTypeSpecified = True
                                    Case Else
                                        ValidaCFDi.AgregaRespuesta("11", 29, "Debe indicar un valor correcto en el campo specialServicesType (28) de la seccion LINEITEM del complemento detallista.", Resp)
                                End Select
                            End If
                            If (Elementos(29).Trim <> "" Or Elementos(30).Trim <> "") Then
                                Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).monetaryAmountOrPercentage = New Detallista.detallistaLineItemAllowanceChargeMonetaryAmountOrPercentage()
                                If (Elementos(29).Trim = "") Then
                                    ValidaCFDi.AgregaRespuesta("11", 30, "Debe indicar el dato percentagePerUnit (29) de la seccion LINEITEM del complemento detallista.", Resp)
                                Else
                                    If (Elementos(29).Trim.Length > 5) Then
                                        ValidaCFDi.AgregaRespuesta("11", 30, "El dato percentagePerUnit (29) de la seccion LINEITEM del complemento detallista no puede tener una longitud mayor a 5 caracteres.", Resp)
                                    End If
                                    Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).monetaryAmountOrPercentage.percentagePerUnit = Elementos(29).Trim
                                End If
                                If (Elementos(30).Trim = "") Then
                                    ValidaCFDi.AgregaRespuesta("11", 31, "Debe indicar el dato amountPerUnit (30) de la seccion LINEITEM del complemento detallista.", Resp)
                                Else
                                    Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).monetaryAmountOrPercentage.ratePerUnit = New Detallista.detallistaLineItemAllowanceChargeMonetaryAmountOrPercentageRatePerUnit()
                                    If (Elementos(30).Trim.Length > 5) Then
                                        ValidaCFDi.AgregaRespuesta("11", 31, "El dato amountPerUnit (30) de la seccion LINEITEM del complemento detallista no puede tener una longitud mayor a 5 caracteres.", Resp)
                                    End If
                                    Detallista.lineItem(Detallista.lineItem.Length - 1).allowanceCharge(0).monetaryAmountOrPercentage.ratePerUnit.amountPerUnit = Elementos(30).Trim
                                End If
                            End If
                        End If
                        If (Elementos(31).Trim <> "" Or Elementos(32).Trim <> "" Or Elementos(33).Trim <> "" Or Elementos(34).Trim <> "" Or Elementos(35).Trim <> "") Then
                            Detallista.lineItem(Detallista.lineItem.Length - 1).tradeItemTaxInformation = New Detallista.detallistaLineItemTradeItemTaxInformation() {New Detallista.detallistaLineItemTradeItemTaxInformation()}
                            If (Elementos(31).Trim = "") Then
                                ValidaCFDi.AgregaRespuesta("11", 32, "Debe indicar el dato taxTypeDescription (31) de la seccion LINEITEM del complemento detallista.", Resp)
                            Else
                                Select Case Elementos(31).Trim.ToUpper
                                    Case "GST"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).tradeItemTaxInformation(0).taxTypeDescription = WSPremium.Detallista.detallistaLineItemTradeItemTaxInformationTaxTypeDescription.AAA
                                    Case "VAT"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).tradeItemTaxInformation(0).taxTypeDescription = WSPremium.Detallista.detallistaLineItemTradeItemTaxInformationTaxTypeDescription.AAA
                                    Case "LAC"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).tradeItemTaxInformation(0).taxTypeDescription = WSPremium.Detallista.detallistaLineItemTradeItemTaxInformationTaxTypeDescription.AAA
                                    Case "AAA"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).tradeItemTaxInformation(0).taxTypeDescription = WSPremium.Detallista.detallistaLineItemTradeItemTaxInformationTaxTypeDescription.AAA
                                    Case "ADD"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).tradeItemTaxInformation(0).taxTypeDescription = WSPremium.Detallista.detallistaLineItemTradeItemTaxInformationTaxTypeDescription.AAA
                                    Case "FRE"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).tradeItemTaxInformation(0).taxTypeDescription = WSPremium.Detallista.detallistaLineItemTradeItemTaxInformationTaxTypeDescription.AAA
                                    Case "LOC"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).tradeItemTaxInformation(0).taxTypeDescription = WSPremium.Detallista.detallistaLineItemTradeItemTaxInformationTaxTypeDescription.AAA
                                    Case "STT"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).tradeItemTaxInformation(0).taxTypeDescription = WSPremium.Detallista.detallistaLineItemTradeItemTaxInformationTaxTypeDescription.AAA
                                    Case "OTH"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).tradeItemTaxInformation(0).taxTypeDescription = WSPremium.Detallista.detallistaLineItemTradeItemTaxInformationTaxTypeDescription.AAA
                                End Select
                            End If
                            If (Elementos(32).Trim <> "") Then
                                If (Elementos(32).Trim.Length > 20) Then
                                    ValidaCFDi.AgregaRespuesta("11", 33, "El dato referenceNumber (32) de la seccion LINEITEM del complemento detallista no puede tener una longitud mayor a 20 caracteres.", Resp)
                                End If
                                Detallista.lineItem(Detallista.lineItem.Length - 1).tradeItemTaxInformation(0).referenceNumber = Elementos(32).Trim
                            End If
                            Detallista.lineItem(Detallista.lineItem.Length - 1).tradeItemTaxInformation(0).tradeItemTaxAmount = New Detallista.detallistaLineItemTradeItemTaxInformationTradeItemTaxAmount()
                            If (Elementos(33).Trim = "") Then
                                ValidaCFDi.AgregaRespuesta("11", 34, "Debe indicar el dato taxPercentage (33) de la seccion LINEITEM del complemento detallista.", Resp)
                            Else
                                Try
                                    Detallista.lineItem(Detallista.lineItem.Length - 1).tradeItemTaxInformation(0).tradeItemTaxAmount.taxPercentage = CDec(Elementos(33).Trim)
                                Catch ex As Exception
                                    ValidaCFDi.AgregaRespuesta("11", 34, "No se pudo realizar la conversion a decimal de taxPercentage LineItem", Resp)
                                End Try
                            End If
                            If (Elementos(34).Trim = "") Then
                                ValidaCFDi.AgregaRespuesta("11", 35, "Debe indicar el dato taxAmount (34) de la seccion LINEITEM del complemento detallista.", Resp)
                            Else
                                Try
                                    Detallista.lineItem(Detallista.lineItem.Length - 1).tradeItemTaxInformation(0).tradeItemTaxAmount.taxAmount = CDec(Elementos(34).Trim)
                                Catch ex As Exception
                                    ValidaCFDi.AgregaRespuesta("11", 35, "No se pudo convertir taxAmount LineItem a decimal.", Resp)
                                End Try
                            End If
                            If (Elementos(35).Trim <> "") Then
                                Select Case Elementos(35).Trim.ToUpper
                                    Case "TRANSFERIDO"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).tradeItemTaxInformation(0).taxCategory = WSPremium.Detallista.detallistaLineItemTradeItemTaxInformationTaxCategory.TRANSFERIDO
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).tradeItemTaxInformation(0).taxCategorySpecified = True
                                    Case "RETENIDO"
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).tradeItemTaxInformation(0).taxCategory = WSPremium.Detallista.detallistaLineItemTradeItemTaxInformationTaxCategory.RETENIDO
                                        Detallista.lineItem(Detallista.lineItem.Length - 1).tradeItemTaxInformation(0).taxCategorySpecified = True
                                    Case Else
                                        ValidaCFDi.AgregaRespuesta("11", 36, "Debe indicar un valor correcto en el dato taxcategory (35) de la seccion LINEITEM del complemento detallista.", Resp)
                                End Select
                            End If
                        End If
                        Detallista.lineItem(Detallista.lineItem.Length - 1).totalLineAmount = New Detallista.detallistaLineItemTotalLineAmount()
                        Detallista.lineItem(Detallista.lineItem.Length - 1).totalLineAmount.grossAmount = New Detallista.detallistaLineItemTotalLineAmountGrossAmount()
                        Detallista.lineItem(Detallista.lineItem.Length - 1).totalLineAmount.grossAmount.Amount = Comprobante.Conceptos(Elementos(4) - 1).importe
                        Detallista.lineItem(Detallista.lineItem.Length - 1).totalLineAmount.netAmount = New Detallista.detallistaLineItemTotalLineAmountNetAmount()
                        Try
                            Detallista.lineItem(Detallista.lineItem.Length - 1).totalLineAmount.netAmount.Amount = CDec(Elementos(36).Trim)
                        Catch ex As Exception
                            ValidaCFDi.AgregaRespuesta("11", 37, "No se pudo realizar la conversion a decimal del dato NetAmount LineItem del complemento detallista.", Resp)
                        End Try
                    End If

                ElseIf (Elementos.Length = 6 And Trim(Elementos(1)).ToUpper = "DETALLISTA" And _
                Trim(Elementos(2)).ToUpper = "TOTALALLOWANCECHARGE") Then
                    If (Detallista.TotalAllowanceCharge Is Nothing) Then
                        Detallista.TotalAllowanceCharge = New Detallista.detallistaTotalAllowanceCharge() {New Detallista.detallistaTotalAllowanceCharge()}
                        If (Elementos(3) = "") Then
                            ValidaCFDi.AgregaRespuesta("11", 4, "Debe indicar el dato AllowanceOrChargeType(3) de la seccion TOTALALLOWANCECHARGE del complemento detallista.", Resp)
                        Else
                            Select Case Elementos(3).ToUpper
                                Case "ALLOWANCE"
                                    Detallista.TotalAllowanceCharge(0).allowanceOrChargeType = WSPremium.Detallista.detallistaTotalAllowanceChargeAllowanceOrChargeType.ALLOWANCE
                                Case "CHARGE"
                                    Detallista.TotalAllowanceCharge(0).allowanceOrChargeType = WSPremium.Detallista.detallistaTotalAllowanceChargeAllowanceOrChargeType.CHARGE
                                Case Else
                                    ValidaCFDi.AgregaRespuesta("11", 4, "Debe indicar un valor correcto en el dato AllowanceOrChargeType(3) de la seccion TOTALALLOWANCECHARGE del complemento detallista.", Resp)
                            End Select
                        End If
                        If (Elementos(4) <> "") Then
                            Select Case Elementos(4).ToUpper
                                Case "AA"
                                    Detallista.TotalAllowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.AA
                                    Detallista.TotalAllowanceCharge(0).specialServicesTypeSpecified = True
                                Case "ADS"
                                    Detallista.TotalAllowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.ADS
                                    Detallista.TotalAllowanceCharge(0).specialServicesTypeSpecified = True
                                Case "ADO"
                                    Detallista.TotalAllowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.ADO
                                    Detallista.TotalAllowanceCharge(0).specialServicesTypeSpecified = True
                                Case "ABZ"
                                    Detallista.TotalAllowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.ABZ
                                    Detallista.TotalAllowanceCharge(0).specialServicesTypeSpecified = True
                                Case "DA"
                                    Detallista.TotalAllowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.DA
                                    Detallista.TotalAllowanceCharge(0).specialServicesTypeSpecified = True
                                Case "EAA"
                                    Detallista.TotalAllowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.EAA
                                    Detallista.TotalAllowanceCharge(0).specialServicesTypeSpecified = True
                                Case "PI"
                                    Detallista.TotalAllowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.PI
                                    Detallista.TotalAllowanceCharge(0).specialServicesTypeSpecified = True
                                Case "TAE"
                                    Detallista.TotalAllowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.TAE
                                    Detallista.TotalAllowanceCharge(0).specialServicesTypeSpecified = True
                                Case "SAB"
                                    Detallista.TotalAllowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.SAB
                                    Detallista.TotalAllowanceCharge(0).specialServicesTypeSpecified = True
                                Case "RAA"
                                    Detallista.TotalAllowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.RAA
                                    Detallista.TotalAllowanceCharge(0).specialServicesTypeSpecified = True
                                Case "PAD"
                                    Detallista.TotalAllowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.PAD
                                    Detallista.TotalAllowanceCharge(0).specialServicesTypeSpecified = True
                                Case "FG"
                                    Detallista.TotalAllowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.FG
                                    Detallista.TotalAllowanceCharge(0).specialServicesTypeSpecified = True
                                Case "FA"
                                    Detallista.TotalAllowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.FA
                                    Detallista.TotalAllowanceCharge(0).specialServicesTypeSpecified = True
                                Case "TD"
                                    Detallista.TotalAllowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.TD
                                    Detallista.TotalAllowanceCharge(0).specialServicesTypeSpecified = True
                                Case "TS"
                                    Detallista.TotalAllowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.TS
                                    Detallista.TotalAllowanceCharge(0).specialServicesTypeSpecified = True
                                Case "TX"
                                    Detallista.TotalAllowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.TX
                                    Detallista.TotalAllowanceCharge(0).specialServicesTypeSpecified = True
                                Case "ZZZ"
                                    Detallista.TotalAllowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.ZZZ
                                    Detallista.TotalAllowanceCharge(0).specialServicesTypeSpecified = True
                                Case "VAB"
                                    Detallista.TotalAllowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.VAB
                                    Detallista.TotalAllowanceCharge(0).specialServicesTypeSpecified = True
                                Case "UM"
                                    Detallista.TotalAllowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.UM
                                    Detallista.TotalAllowanceCharge(0).specialServicesTypeSpecified = True
                                Case "DI"
                                    Detallista.TotalAllowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.DI
                                    Detallista.TotalAllowanceCharge(0).specialServicesTypeSpecified = True
                                Case "ADT"
                                    Detallista.TotalAllowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.ADT
                                    Detallista.TotalAllowanceCharge(0).specialServicesTypeSpecified = True
                                Case "AJ"
                                    Detallista.TotalAllowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.AJ
                                    Detallista.TotalAllowanceCharge(0).specialServicesTypeSpecified = True
                                Case "CAC"
                                    Detallista.TotalAllowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.CAC
                                    Detallista.TotalAllowanceCharge(0).specialServicesTypeSpecified = True
                                Case "COD"
                                    Detallista.TotalAllowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.COD
                                    Detallista.TotalAllowanceCharge(0).specialServicesTypeSpecified = True
                                Case "EAB"
                                    Detallista.TotalAllowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.EAB
                                    Detallista.TotalAllowanceCharge(0).specialServicesTypeSpecified = True
                                Case "FC"
                                    Detallista.TotalAllowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.FC
                                    Detallista.TotalAllowanceCharge(0).specialServicesTypeSpecified = True
                                Case "FI"
                                    Detallista.TotalAllowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.FI
                                    Detallista.TotalAllowanceCharge(0).specialServicesTypeSpecified = True
                                Case "HD"
                                    Detallista.TotalAllowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.HD
                                    Detallista.TotalAllowanceCharge(0).specialServicesTypeSpecified = True
                                Case "QD"
                                    Detallista.TotalAllowanceCharge(0).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.QD
                                    Detallista.TotalAllowanceCharge(0).specialServicesTypeSpecified = True
                                Case Else
                                    ValidaCFDi.AgregaRespuesta("11", 5, "Debe indicar un valor correcto en el campo specialServicesType (4) de la seccion TOTALALLOWANCECHARGE del complemento detallista.", Resp)
                            End Select
                        End If
                        If (Elementos(5) <> "") Then
                            Try
                                Detallista.TotalAllowanceCharge(0).Amount = CDec(Elementos(5))
                                Detallista.TotalAllowanceCharge(0).AmountSpecified = True
                            Catch ex As Exception
                                ValidaCFDi.AgregaRespuesta("11", 6, "No se pudo realizar la conversion a decimal el dato Amount (5) de la seccion TOTALALLOWANCECHARGE del complemento detallista.", Resp)
                            End Try
                        End If
                    Else
                        ReDim Preserve Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length)
                        Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1) = New Detallista.detallistaTotalAllowanceCharge()
                        If (Elementos(3) = "") Then
                            ValidaCFDi.AgregaRespuesta("11", 4, "Debe indicar el dato AllowanceOrChargeType(3) de la seccion TOTALALLOWANCECHARGE del complemento detallista.", Resp)
                        Else
                            Select Case Elementos(3).ToUpper
                                Case "ALLOWANCE"
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).allowanceOrChargeType = WSPremium.Detallista.detallistaTotalAllowanceChargeAllowanceOrChargeType.ALLOWANCE
                                Case "CHARGE"
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).allowanceOrChargeType = WSPremium.Detallista.detallistaTotalAllowanceChargeAllowanceOrChargeType.CHARGE
                                Case Else
                                    ValidaCFDi.AgregaRespuesta("11", 4, "Debe indicar un valor correcto en el dato AllowanceOrChargeType(3) de la seccion TOTALALLOWANCECHARGE del complemento detallista.", Resp)
                            End Select
                        End If
                        If (Elementos(4) <> "") Then
                            Select Case Elementos(4).ToUpper
                                Case "AA"
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.AA
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "ADS"
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.ADS
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "ADO"
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.ADO
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "ABZ"
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.ABZ
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "DA"
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.DA
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "EAA"
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.EAA
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "PI"
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.PI
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "TAE"
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.TAE
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "SAB"
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.SAB
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "RAA"
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.RAA
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "PAD"
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.PAD
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "FG"
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.FG
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "FA"
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.FA
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "TD"
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.TD
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "TS"
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.TS
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "TX"
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.TX
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "ZZZ"
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.ZZZ
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "VAB"
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.VAB
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "UM"
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.UM
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "DI"
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.DI
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "ADT"
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.ADT
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "AJ"
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.AJ
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "CAC"
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.CAC
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "COD"
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.COD
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "EAB"
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.EAB
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "FC"
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.FC
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "FI"
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.FI
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "HD"
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.HD
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case "QD"
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesType = WSPremium.Detallista.detallistaTotalAllowanceChargeSpecialServicesType.QD
                                    Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length - 1).specialServicesTypeSpecified = True
                                Case Else
                                    ValidaCFDi.AgregaRespuesta("11", 5, "Debe indicar un valor correcto en el campo specialServicesType (4) de la seccion TOTALALLOWANCECHARGE del complemento detallista.", Resp)
                            End Select
                        End If
                        If (Elementos(5) <> "") Then
                            Try
                                Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length).Amount = CDec(Elementos(5))
                                Detallista.TotalAllowanceCharge(Detallista.TotalAllowanceCharge.Length).AmountSpecified = True
                            Catch ex As Exception
                                ValidaCFDi.AgregaRespuesta("11", 6, "No se pudo realizar la conversion a decimal el dato Amount (5) de la seccion TOTALALLOWANCECHARGE del complemento detallista.", Resp)
                            End Try
                        End If
                    End If
                Else
                    ValidaCFDi.AgregaRespuesta("11", 0, "El contenido del documento TXT no es correcto. alguna de las secciones no corresponde con el formato especificado en la sección detallista.", Resp)
                End If
            Else
                ValidaCFDi.AgregaRespuesta("11", 0, "El contenido del documento TXT no es correcto. La seccion 11 no corresponde con el formato especificado", Resp)
            End If
        Catch ex As Exception
            ValidaCFDi.AgregaRespuesta("11", 0, ex.Message, Resp)
        End Try
    End Sub
End Class
